Files
react/scripts/rollup/build.js
T
Dominic Gannaway d00cf558dc dev/prod mode WIP
2017-03-07 17:42:00 +00:00

68 lines
1.7 KiB
JavaScript

"use strict";
const { rollup } = require('rollup');
const bundles = require('./bundles');
const babel = require('rollup-plugin-babel');
const commonjs = require('rollup-plugin-commonjs');
const alias = require('rollup-plugin-alias');
const filesize = require('rollup-plugin-filesize');
const uglify = require('rollup-plugin-uglify');
const chalk = require('chalk');
const boxen = require('boxen');
const { createModuleMap } = require('./moduleMap');
const { getFbjsModuleAliases } = require('./fbjs');
const external = [
'fbjs/lib/warning',
];
function getAliases(paths) {
return Object.assign(
createModuleMap(paths),
getFbjsModuleAliases()
);
}
function setDest(config, filename) {
return Object.assign({}, config, {
dest: config.destDir + filename,
});
}
function getPlugins(entry, babelOpts, paths, filename, dev) {
const plugins = [
babel(babelOpts),
alias(getAliases(paths)),
commonjs(),
];
if (!dev) {
plugins.push(uglify());
}
// this needs to come last
plugins.push(filesize({
render: (options, size, gzip) => (
boxen(chalk.green.bold(`"${filename}" size: `) + chalk.yellow.bold(size) + ', ' +
chalk.green.bold('gzip size: ') + chalk.yellow.bold(gzip), { padding: 1 }
)
),
}));
return plugins;
}
function createBundle({babelOpts, entry, config, paths, name}, dev) {
const filename = dev ? `${name}.js` : `${name}.min.js`;
return rollup({
entry,
plugins: getPlugins(entry, babelOpts, paths, filename, dev),
external,
}).then(({ write }) => write(setDest(config, filename))).catch(console.error);
}
bundles.forEach(bundle => (
createBundle(bundle, true).then(() =>
createBundle(bundle, false)
)
));