Files
ArtPlayer/scripts/creatRollupConfig.js
T
2019-11-15 11:19:40 +08:00

100 lines
3.6 KiB
JavaScript

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 { sizeSnapshot } = require('rollup-plugin-size-snapshot');
const { terser } = require('rollup-plugin-terser');
const copyAfterBuild = require('./copyAfterBuild');
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,
},
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: isProd
? path.join(projectPath, `dist/${name}.css`)
: path.join(process.cwd(), `docs/uncompiled/${name}.css`),
}),
nodeResolve(),
commonjs(),
babel({
runtimeHelpers: true,
exclude: ['node_modules/**', 'packages/**/node_modules/**'],
presets: [['@babel/env', { modules: false }]],
plugins: ['@babel/plugin-external-helpers', '@babel/plugin-transform-runtime'],
}),
svgo({
raw: true,
}),
replace({
exclude: 'node_modules/**',
__ENV__: JSON.stringify(process.env.NODE_ENV || 'development'),
__VERSION__: version,
}),
isProd && sizeSnapshot(),
isProd &&
terser({
output: {
preamble: banner,
},
}),
isProd &&
copyAfterBuild({
from: path.join(projectPath, 'dist/*'),
to: path.join(process.cwd(), 'dist'),
}),
],
};
};