Permalink
Switch branches/tags
Find file
Fetching contributors…
Cannot retrieve contributors at this time
139 lines (125 sloc) 5.46 KB
/*
* Copyright (c) 2015 Adobe Systems Incorporated. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
/* eslint-env node */
"use strict";
var path = require("path"),
webpack = require("webpack"),
WebpackNotifierPlugin = require("webpack-notifier");
require("es6-promise").polyfill(); // Required for css loading
// In dev mode, we only compile English and build sourcemaps
var devMode = process.env.SPACES_DEV_MODE === "true",
// If grunt didn't pass us locales, we go with only English
locales = process.env.SPACES_LOCALES,
languages = locales ? locales.split(",") : ["en"];
// We need grunt to build the nls and less files, so don't allow webpack by itself
if (!locales) {
throw new Error("Please compile using `grunt compile` instead of webpack directly");
}
var buildConfigs = languages.map(function (lang) {
var options = {
entry: {
app: "./src/js/init.js"
},
output: {
path: "./build/",
filename: "spaces-design-" + lang + ".js"
},
module: {
loaders: [
// Transpiling React code to js
// TODO: Right now, js files don't get babelified correctly
// For es6 support, we need this fixed
{
test: /\.(jsx)$/,
exclude: /(node_modules)/,
loader: "babel",
query: {
cacheDirectory: true,
presets: ["react"]
}
},
// JSON files are parsed and directly loaded into the bundle
{
test: /\.json$/,
exclude: /(node_modules)/,
loader: "json"
},
{
test: /\.svg$/,
exclude: /(node_modules)/,
loader: "raw"
}
]
},
resolve: {
root: [
path.join(__dirname, "src")
],
alias: {
// Until spaces-adapter is better built and points to it's main.js in it's package.json
"adapter": path.join(__dirname, "/node_modules/spaces-adapter/src/main.js"),
// "scriptjs": path.join(__dirname, "/node_modules/scriptjs/dist/script.js"),
"generator-connection": path.join(__dirname, "/node_modules/generator-connection/main.js"),
// Eventually clean all this up and use "events" that node provides to webpack
// But that requires some code changes too (emitEvent => emit)
"eventEmitter": path.join(__dirname, "/node_modules/wolfy87-eventemitter/EventEmitter.js"),
// We alias the localization here (@/src/js/util/nls.js)
"nls/dictionary.json": path.join(__dirname, "/build/nls/" + lang + ".json")
},
extensions: ["", ".js", ".jsx", ".json", ".less"]
},
plugins: [
new webpack.DefinePlugin({
// This passes __PG_DEBUG__ variable to the bundle
__PG_DEBUG__: devMode,
// React uses this to enable production mode
"process.env": {
NODE_ENV: devMode ? "\"development\"" : "\"production\""
}
}),
new WebpackNotifierPlugin({ alwaysNotify: true })
],
stats: {
hash: true // This prints out the build hash, making it easier to tell when a rebuild happens
}
};
if (devMode) {
options.devtool = "inline-source-map";
options.debug = "true";
// These lines break the build into two chunks, one for our code, and one for all our dependencies
// This allows for a faster rebuild time
options.plugins.push(new webpack.optimize.CommonsChunkPlugin("vendor", "externalDeps.js"));
options.entry.vendor = ["react", "lodash", "bluebird", "mathjs", "immutable", "fluxxor", "d3"];
}
return options;
});
// Hack: add Timestamp to the WebPack build message.
WebpackNotifierPlugin.prototype._compileMessage = WebpackNotifierPlugin.prototype.compileMessage;
WebpackNotifierPlugin.prototype.compileMessage = function (stats) {
var msg = this._compileMessage(stats);
if (msg === "Build successful") {
msg += " @ " + (new Date()).toLocaleTimeString();
}
return msg;
};
module.exports = buildConfigs;