119 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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);
 | 
						|
                        });
 | 
						|
                    });
 | 
						|
                }
 | 
						|
            });
 | 
						|
    });
 | 
						|
}
 |