From d00cf558dcdd67dd0789121f977dfdb8c2fe41de Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 7 Mar 2017 17:42:00 +0000 Subject: [PATCH] dev/prod mode WIP --- package.json | 4 ++++ scripts/rollup/babel.js | 1 + scripts/rollup/build.js | 48 ++++++++++++++++++++++++++++--------- scripts/rollup/bundles.js | 3 ++- scripts/rollup/fbjs.js | 1 + scripts/rollup/moduleMap.js | 4 ---- 6 files changed, 45 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index a305ae8cae..a26ad933a3 100644 --- a/package.json +++ b/package.json @@ -34,8 +34,10 @@ "babel-preset-react": "^6.5.0", "babel-traverse": "^6.9.0", "babylon": "6.15.0", + "boxen": "^1.0.0", "browserify": "^13.0.0", "bundle-collapser": "^1.1.1", + "chalk": "^1.1.3", "coffee-script": "^1.8.0", "core-js": "^2.2.1", "coveralls": "^2.11.6", @@ -74,8 +76,10 @@ "rollup-plugin-alias": "^1.2.0", "rollup-plugin-babel": "^2.7.1", "rollup-plugin-commonjs": "^7.0.0", + "rollup-plugin-filesize": "^1.0.1", "rollup-plugin-inject": "^2.0.0", "rollup-plugin-node-resolve": "^2.0.0", + "rollup-plugin-uglify": "^1.0.1", "run-sequence": "^1.1.4", "through2": "^2.0.0", "tmp": "~0.0.28", diff --git a/scripts/rollup/babel.js b/scripts/rollup/babel.js index 2986e1d345..f37b9c9b32 100644 --- a/scripts/rollup/babel.js +++ b/scripts/rollup/babel.js @@ -3,6 +3,7 @@ const devExpressionWithCodes = require('../error-codes/dev-expression-with-codes'); const babelOptsReact = { + exclude: 'node_modules/**', plugins: [ devExpressionWithCodes, // this pass has to run before `rewrite-modules` ], diff --git a/scripts/rollup/build.js b/scripts/rollup/build.js index bc2a9e3a93..17446faff2 100644 --- a/scripts/rollup/build.js +++ b/scripts/rollup/build.js @@ -1,12 +1,14 @@ "use strict"; const { rollup } = require('rollup'); -const { resolve } = require('path'); const bundles = require('./bundles'); const babel = require('rollup-plugin-babel'); const commonjs = require('rollup-plugin-commonjs'); const alias = require('rollup-plugin-alias'); -const inject = require('rollup-plugin-inject'); +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'); @@ -21,21 +23,45 @@ function getAliases(paths) { ); } -function getPlugins(entry, babelOpts, paths) { - return [ +function setDest(config, filename) { + return Object.assign({}, config, { + dest: config.destDir + filename, + }); +} + +function getPlugins(entry, babelOpts, paths, filename, dev) { + const plugins = [ babel(babelOpts), - inject({ - 'Object.assign': resolve('./node_modules/object-assign/index.js'), - }), 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; } -bundles.forEach(({babelOpts, entry, config, paths}) => ( - rollup({ +function createBundle({babelOpts, entry, config, paths, name}, dev) { + const filename = dev ? `${name}.js` : `${name}.min.js`; + + return rollup({ entry, - plugins: getPlugins(entry, babelOpts, paths), + plugins: getPlugins(entry, babelOpts, paths, filename, dev), external, - }).then(({ write }) => write(config)).catch(console.error) + }).then(({ write }) => write(setDest(config, filename))).catch(console.error); +} + +bundles.forEach(bundle => ( + createBundle(bundle, true).then(() => + createBundle(bundle, false) + ) )); diff --git a/scripts/rollup/bundles.js b/scripts/rollup/bundles.js index 64c4ef6421..e74e309a3f 100644 --- a/scripts/rollup/bundles.js +++ b/scripts/rollup/bundles.js @@ -6,8 +6,9 @@ const { const bundles = [ { + name: 'react', config: { - dest: 'build/rollup/react.js', + destDir: 'build/rollup/', format: 'umd', moduleName: 'React', sourceMap: false, diff --git a/scripts/rollup/fbjs.js b/scripts/rollup/fbjs.js index 7b544e40f4..cb9174df8e 100644 --- a/scripts/rollup/fbjs.js +++ b/scripts/rollup/fbjs.js @@ -19,6 +19,7 @@ function getFbjsModuleAliases() { 'fbjs/lib/warning': resolve('./node_modules/fbjs/lib/warning.js'), reactProdInvariant: resolve('./src/shared/utils/reactProdInvariant.js'), 'fbjs/lib/invariant': resolve('./node_modules/fbjs/lib/invariant.js'), + 'object-assign': resolve('./node_modules/object-assign/index.js'), }; } diff --git a/scripts/rollup/moduleMap.js b/scripts/rollup/moduleMap.js index cad176f246..076315762c 100644 --- a/scripts/rollup/moduleMap.js +++ b/scripts/rollup/moduleMap.js @@ -18,10 +18,6 @@ function createModuleMap(paths) { files.forEach(file => { const moduleName = basename(file, '.js'); - if (moduleName === 'ReactElementSymbol') { - console.log(file) - } - moduleMap[moduleName] = resolve(file); }); });