Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| /* | |
| * 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; |