// 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); }); }); } }); }); }