project/node_modules/zrender/build/build.js

119 lines
3.5 KiB
JavaScript

// const typescript = require('@rollup/plugin-typescript');
const typescript = require('rollup-plugin-typescript2');
const replace = require('@rollup/plugin-replace');
const rollup = require('rollup');
const path = require('path');
const processs = require('process');
const chalk = require('chalk');
const progress = require('./progress');
const UglifyJS = require('uglify-js');
const fs = require('fs');
function current() {
return (new Date()).toLocaleString();
}
function createInputOption(env, isWatch) {
return {
input: path.resolve(__dirname, '../index.ts'),
plugins: [
typescript({
clean: !isWatch,
tsconfigOverride: {
compilerOptions: {
// Rollup don't use CommonJS by default.
module: 'ES2015',
sourceMap: true,
// Use the esm d.ts
declaration: false
}
}
}),
replace({
preventAssignment: true,
'process.env.NODE_ENV': JSON.stringify(env)
}),
progress({
scope: {
total: 0
}
})
]
};
}
const outputOption = {
format: 'umd',
file: path.resolve(__dirname, '../dist/zrender.js'),
sourcemap: true,
name: 'zrender'
};
function minify(outPath) {
const code = fs.readFileSync(outPath, 'utf-8');
const uglifyResult = UglifyJS.minify(code);
if (uglifyResult.error) {
throw new Error(uglifyResult.error);
}
fs.writeFileSync(outPath, uglifyResult.code, 'utf-8');
}
if (processs.argv.includes('--watch')) {
const watcher = rollup.watch({
...createInputOption('development', true),
output: [outputOption],
watch: {
clearScreen: true
}
});
watcher.on('event', event => {
switch(event.code) {
// case 'START':
// console.log(chalk.green('Begin to watch'));
// break;
case 'BUNDLE_START':
console.log(
chalk.gray(current()),
chalk.blue('File changed. Begin to bundle')
);
break;
case 'BUNDLE_END':
console.log(
chalk.gray(current()),
chalk.green('Finished bundle')
);
break;
case 'ERROR':
console.log(
chalk.gray(current()),
chalk.red(event.error)
);
break;
}
});
}
else {
// Unminified
rollup.rollup({
...createInputOption('development', false)
}).then(bundle => {
bundle.write(outputOption)
.then(() => {
// Minified
if (process.argv.indexOf('--minify') >= 0) {
rollup.rollup({
...createInputOption('production', false)
}).then(bundle => {
const file = outputOption.file.replace(/.js$/, '.min.js');
bundle.write(Object.assign(outputOption, {
file,
sourcemap: false
})).then(function () {
minify(file);
});
});
}
});
});
}