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

"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;