const fs = require('fs'); const path = require('path'); const { babel } = require('@rollup/plugin-babel'); const commonjs = require('@rollup/plugin-commonjs'); const { nodeResolve } = require('@rollup/plugin-node-resolve'); const postcss = require('rollup-plugin-postcss'); const { eslint } = require('rollup-plugin-eslint'); const autoprefixer = require('autoprefixer'); const cssnano = require('cssnano'); const replace = require('@rollup/plugin-replace'); const svgo = require('rollup-plugin-svgo'); const { terser } = require('rollup-plugin-terser'); const copyAfterBuild = require('./copyAfterBuild'); const removeHtmlSpace = require('./removeHtmlSpace'); const json = require('@rollup/plugin-json'); module.exports = function creatRollupConfig(projectPath) { const packageJson = JSON.parse(fs.readFileSync(path.join(projectPath, 'package.json'), 'utf-8')); const { version, homepage, name, expose } = packageJson; const isProd = process.env.NODE_ENV === 'production'; const banner = '/*!\n' + ` * ${name}.js v${version}\n` + ` * Github: ${homepage}\n` + ` * (c) 2017-${new Date().getFullYear()} Harvey Zack\n` + ' * Released under the MIT License.\n' + ' */\n'; return { input: path.join(projectPath, 'src/index.js'), output: { name: expose, file: isProd ? path.join(projectPath, `dist/${name}.js`) : path.join(process.cwd(), `docs/uncompiled/${name}.js`), format: 'umd', sourcemap: isProd ? false : true, }, watch: { exclude: ['node_modules/**', 'packages/**/node_modules/**'], }, plugins: [ json({ exclude: ['node_modules/**', 'packages/**/node_modules/**'], }), eslint({ exclude: [ 'node_modules/**', 'packages/*/src/**/*.scss', 'packages/*/src/**/*.svg', 'packages/*/src/**/*.json', ], }), postcss({ plugins: [ autoprefixer(), cssnano({ preset: [ 'default', { calc: false, }, ], }), ], sourceMap: isProd ? false : true, extract: false, }), nodeResolve(), commonjs(), babel({ babelHelpers: 'runtime', exclude: ['node_modules/**', 'packages/**/node_modules/**'], presets: [['@babel/env', { modules: false }]], plugins: ['@babel/plugin-external-helpers', '@babel/plugin-transform-runtime'], }), svgo({ raw: true, }), replace({ preventAssignment: true, exclude: 'node_modules/**', __ENV__: process.env.NODE_ENV || 'development', __VERSION__: version, __BUILD__: Date.now(), }), isProd && removeHtmlSpace(), isProd && terser({ output: { preamble: banner, comments: function () { return false; }, }, }), isProd && copyAfterBuild({ from: path.join(projectPath, 'dist/*'), to: path.join(process.cwd(), 'dist'), }), ], }; };