Skip to content

Flat bundle using Rollup #7178

New issue

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

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

Already on GitHub? # to your account

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