You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
1.8 KiB
92 lines
1.8 KiB
"use strict";
|
|
|
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
|
|
/* eslint-disable @typescript-eslint/explicit-function-return-type */
|
|
const rollup = require('rollup');
|
|
|
|
const ora = require('ora');
|
|
|
|
const util = require('util');
|
|
|
|
const {
|
|
external,
|
|
globals,
|
|
plugins
|
|
} = require('./config');
|
|
|
|
async function build({
|
|
name,
|
|
input,
|
|
babelConfig = {},
|
|
commonJSConfig = {},
|
|
file,
|
|
watch = false,
|
|
minify
|
|
}) {
|
|
const inputOptions = {
|
|
input,
|
|
plugins: plugins({
|
|
babelConfig,
|
|
minify,
|
|
commonJSConfig
|
|
}),
|
|
external
|
|
};
|
|
const outputOptions = {
|
|
format: 'iife',
|
|
name,
|
|
globals
|
|
};
|
|
|
|
if (file) {
|
|
outputOptions.file = file;
|
|
}
|
|
|
|
if (!minify) {
|
|
outputOptions.sourcemap = 'inline';
|
|
}
|
|
|
|
if (watch) {
|
|
const bundle = await rollup.rollup(inputOptions);
|
|
|
|
if (process.env.DEBUG_BUNDLER) {
|
|
// eslint-disable-next-line no-console
|
|
console.log(util.inspect(bundle.watchFiles, {
|
|
maxArrayLength: null
|
|
}));
|
|
}
|
|
|
|
const spinner = ora(`Bundling files in watchmode: ${JSON.stringify(inputOptions)}`);
|
|
const watcher = rollup.watch({ ...inputOptions,
|
|
output: outputOptions
|
|
});
|
|
watcher.on('event', event => {
|
|
if (event.code === 'START') {
|
|
spinner.start('Bundling files...');
|
|
}
|
|
|
|
if (event.code === 'ERROR' || event.code === 'FATAL') {
|
|
spinner.fail('Bundle fail:'); // eslint-disable-next-line no-console
|
|
|
|
console.log(event);
|
|
}
|
|
|
|
if (event.code === 'END') {
|
|
spinner.succeed(`Finish bundling: ${bundle.watchFiles.length} files`);
|
|
}
|
|
});
|
|
return watcher;
|
|
}
|
|
|
|
const bundle = await rollup.rollup(inputOptions);
|
|
|
|
if (file) {
|
|
return bundle.write(outputOptions);
|
|
}
|
|
|
|
const bundled = await bundle.generate(outputOptions);
|
|
return bundled.output[0];
|
|
}
|
|
|
|
module.exports = build; |