Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Flat bundle using Rollup #7178

Closed
wants to merge 16 commits into from
22 changes: 11 additions & 11 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ module.exports = function(grunt) {

grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
browserify: require('./grunt/config/browserify'),
rollup: require('./grunt/config/rollup'),
npm: require('./grunt/config/npm'),
clean: [
'./build',
Expand Down Expand Up @@ -69,8 +69,8 @@ module.exports = function(grunt) {
spawnGulp(['react:clean'], null, this.async());
});

// Our own browserify-based tasks to build a single JS file build.
grunt.registerMultiTask('browserify', require('./grunt/tasks/browserify'));
// Our own Rollup-based tasks to build a single JS file build.
grunt.registerMultiTask('rollup', require('./grunt/tasks/rollup'));

grunt.registerMultiTask('npm', require('./grunt/tasks/npm'));

Expand Down Expand Up @@ -98,20 +98,20 @@ module.exports = function(grunt) {
grunt.registerTask('build:basic', [
'build-modules',
'version-check',
'browserify:basic',
'rollup:basic',
]);
grunt.registerTask('build:addons', [
'build-modules',
'browserify:addons',
'rollup:addons',
]);
grunt.registerTask('build:min', [
'build-modules',
'version-check',
'browserify:min',
'rollup:min',
]);
grunt.registerTask('build:addons-min', [
'build-modules',
'browserify:addonsMin',
'rollup:addonsMin',
]);
grunt.registerTask('build:npm-react', [
'version-check',
Expand All @@ -133,10 +133,10 @@ module.exports = function(grunt) {
'delete-build-modules',
'build-modules',
'version-check',
'browserify:basic',
'browserify:addons',
'browserify:min',
'browserify:addonsMin',
'rollup:basic',
'rollup:addons',
'rollup:min',
'rollup:addonsMin',
'build:react-dom',
'npm-react:release',
'npm-react:pack',
Expand Down
117 changes: 0 additions & 117 deletions grunt/config/browserify.js

This file was deleted.

88 changes: 88 additions & 0 deletions grunt/config/rollup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
'use strict';

var grunt = require('grunt');
var rollupBabel = require('rollup-plugin-babel');
var rollupReplace = require('rollup-plugin-replace');
var rollupResolve = require('rollup-plugin-node-resolve');
var UglifyJS = require('uglify-js');

var babelEs6ModulifyTransform = require('../../scripts/babel/transform-es6-modulify');

var LICENSE_TEMPLATE =
grunt.file.read('./grunt/data/header-template.txt');

function minify(src) {
return UglifyJS.minify(src, {fromString: true}).code;
}

function bannerify(src) {
var version = grunt.config.data.pkg.version;
var packageName = this.data.packageName || this.data.moduleName;
return (
grunt.template.process(
LICENSE_TEMPLATE,
{data: {package: packageName, version: version}}
) +
src
);
}

function getPlugins(replaceConfig) {
return [
rollupBabel({
babelrc: false,
plugins: [babelEs6ModulifyTransform],
}),
rollupReplace(replaceConfig),
rollupResolve({
main: true,
}),
];
}

var buildConfigs = {
basic: {
after: [bannerify],
dest: 'build/react.js',
entry: 'build/modules/ReactUMDEntry.js',
format: 'umd',
moduleName: 'React',
plugins: getPlugins({'process.env.NODE_ENV': JSON.stringify('development')}),
},
min: {
after: [minify, bannerify],
dest: 'build/react.min.js',
entry: 'build/modules/ReactUMDEntry.js',
format: 'umd',
moduleName: 'React',
plugins: getPlugins({'process.env.NODE_ENV': JSON.stringify('production')}),
},
addons: {
after: [bannerify],
dest: 'build/react-with-addons.js',
entry: 'build/modules/ReactWithAddonsUMDEntry.js',
format: 'umd',
moduleName: 'React',
packageName: 'React (with addons)',
plugins: getPlugins({'process.env.NODE_ENV': JSON.stringify('development')}),
},
addonsMin: {
after: [minify, bannerify],
dest: 'build/react-with-addons.min.js',
entry: 'build/modules/ReactWithAddonsUMDEntry.js',
format: 'umd',
moduleName: 'React',
packageName: 'React (with addons)',
plugins: getPlugins({'process.env.NODE_ENV': JSON.stringify('production')}),
},
};

module.exports = buildConfigs;
3 changes: 0 additions & 3 deletions grunt/data/header-template-short.txt

This file was deleted.

File renamed without changes.
2 changes: 1 addition & 1 deletion grunt/tasks/react-dom.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ var grunt = require('grunt');
var UglifyJS = require('uglify-js');

var LICENSE_TEMPLATE =
grunt.file.read('./grunt/data/header-template-extended.txt');
grunt.file.read('./grunt/data/header-template.txt');

function build(name, filename) {
var srcFile = `vendor/${filename}.js`;
Expand Down
60 changes: 60 additions & 0 deletions grunt/tasks/rollup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
'use strict';

var grunt = require('grunt');
var rollup = require('rollup');

module.exports = function() {
/*
config fields:
{
after: Array<(code: string) => string>,
dest: string,
entry: string,
format: string,
moduleName: string,
packageName?: string,
plugins: Array<any>,
}
*/

var config = this.data;
config.after = config.after || [];

// This task is async...
var done = this.async();

var ctx = this;

rollup.rollup({
entry: config.entry,
plugins: config.plugins,
}).then(function(bundle) {
var code = bundle.generate({
exports: 'default',
dest: config.dest,
format: config.format,
moduleName: config.moduleName,
sourceMap: false,
useStrict: 'true',
}).code;

code = config.after.reduce(function(src, postProcessor) {
// minify and bannerify
return postProcessor.call(ctx, src);
}, code);

grunt.file.write(config.dest, code);
done();
}).catch(function(err) {
grunt.log.error(err);
done();
});
};
11 changes: 6 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,10 @@
"babel-preset-react": "^6.5.0",
"babel-traverse": "^6.9.0",
"babylon": "6.8.0",
"browserify": "^13.0.0",
"bundle-collapser": "^1.1.1",
"coffee-script": "^1.8.0",
"core-js": "^2.2.1",
"coveralls": "^2.11.6",
"del": "^2.0.2",
"derequire": "^2.0.3",
"eslint": "1.10.3",
"eslint-plugin-react": "4.1.0",
"eslint-plugin-react-internal": "file:eslint-rules",
Expand All @@ -61,12 +58,16 @@
"loose-envify": "^1.1.0",
"object-assign": "^4.1.0",
"platform": "^1.1.0",
"rollup": "^0.34.1",
"rollup-plugin-babel": "^2.6.1",
"rollup-plugin-node-resolve": "^1.7.1",
"rollup-plugin-replace": "^1.1.1",
"rollup-plugin-uglify": "^1.0.1",
"run-sequence": "^1.1.4",
"through2": "^2.0.0",
"tmp": "~0.0.28",
"typescript": "~1.8.10",
"uglify-js": "^2.5.0",
"uglifyify": "^3.0.1"
"uglify-js": "^2.5.0"
},
"devEngines": {
"node": "4.x || 5.x || 6.x",
Expand Down
5 changes: 0 additions & 5 deletions packages/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,5 @@
"fbjs": "^0.8.1",
"loose-envify": "^1.1.0",
"object-assign": "^4.1.0"
},
"browserify": {
"transform": [
"loose-envify"
]
}
}
Loading