mirror of
https://github.com/facebook/react.git
synced 2026-02-24 04:33:04 +00:00
67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
var browserify = require('browserify');
|
|
var grunt = require('grunt');
|
|
|
|
module.exports = function() {
|
|
var config = this.data;
|
|
|
|
// This task is async...
|
|
var done = this.async();
|
|
|
|
// More/better assertions
|
|
// grunt.config.requires('outfile');
|
|
// grunt.config.requires('entries');
|
|
config.transforms = config.transforms || [];
|
|
config.after = config.after || [];
|
|
if (typeof config.after === 'function') {
|
|
config.after = [config.after];
|
|
}
|
|
|
|
// create the bundle we'll work with
|
|
var entries = grunt.file.expand(config.entries);
|
|
var bundle = browserify(entries);
|
|
|
|
// Make sure the things that need to be exposed are.
|
|
var requires = config.requires || {};
|
|
if (requires instanceof Array) {
|
|
grunt.file.expand({
|
|
nonull: true, // Keep IDs that don't expand to anything.
|
|
cwd: "src"
|
|
}, requires).forEach(function(name) {
|
|
bundle.require("./build/modules/" + name, {
|
|
expose: name.replace(/\.js$/i, "")
|
|
});
|
|
});
|
|
} else if (typeof requires === "object") {
|
|
Object.keys(requires).forEach(function(name) {
|
|
bundle.require(requires[name], { expose: name });
|
|
});
|
|
}
|
|
|
|
// Extract other options
|
|
var options = {
|
|
debug: config.debug, // sourcemaps
|
|
standalone: config.standalone // global
|
|
};
|
|
|
|
// TODO: make sure this works, test with this too
|
|
config.transforms.forEach(bundle.transform, this);
|
|
|
|
// Actually bundle it up
|
|
var _this = this;
|
|
bundle.bundle(options, function(err, src) {
|
|
if (err) {
|
|
grunt.log.error(err);
|
|
done();
|
|
}
|
|
|
|
config.after.forEach(function(fn) {
|
|
src = fn.call(_this, src);
|
|
});
|
|
|
|
grunt.file.write(config.outfile, src);
|
|
done();
|
|
});
|
|
};
|