diff --git a/package.json b/package.json index af442d9..68a2e43 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "app.js", "license": "MIT", "scripts": { - "dev": "webpack --config webpack.config.js --progress --colors --watch" + "dev": "webpack --config webpack.config.js --progress --colors --watch", + "build": "webpack --config webpack.production.js --progress --colors" }, "dependencies": { "async": "^2.0.1", diff --git a/webpack.config.js b/webpack.config.js index 6d99381..d2cf3dc 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,94 +1,3 @@ -var webpack = require('webpack'); -var path = require('path'); -var ExtractTextPlugin = require("extract-text-webpack-plugin"); +var baseConfig = require('./webpackBaseConfig'); -module.exports = { - plugins: [ - new webpack.ProvidePlugin({ - '_': 'lodash', - Visibility: "visibilityjs", - Cookies: "js-cookie", - emojify: "emojify.js", - io: "socket.io-client", - key: "keymaster" - }), - new webpack.DefinePlugin({ - "require.specified": "require.resolve" - }), - new ExtractTextPlugin("[name].css"), - new webpack.optimize.CommonsChunkPlugin({ - name: "vendor", - filename: "vendor.bundle.js", - minChunks: Infinity, - }) - ], - - entry: { - index: path.join(__dirname, 'public/js/index.js'), - public: path.join(__dirname, 'public/js/public.js'), - slide: path.join(__dirname, 'public/js/slide.js'), - locale: path.join(__dirname, 'public/js/locale.js'), - vendor: [ - "expose?$!expose?jQuery!jquery", - "jquery-textcomplete", - "jquery-mousewheel", - "jquery-scrollspy/jquery-scrollspy", - "expose?LZString!lz-string", - "expose?filterXSS!xss", - "expose?Viz!viz.js", - "js-url", - "bootstrap" - ] - }, - - output: { - path: path.join(__dirname, 'public/build'), - filename: '[name].js' - }, - - resolve: { - root: [ - path.resolve(__dirname, 'src'), - path.resolve(__dirname, 'node_modules') - ], - extensions: ["", ".js"], - alias: { - 'jquery-ui': 'jquery-ui/ui/widgets' - } - }, - - module: { - loaders: [{ - test: /\.json$/, - loader: 'json-loader' - }, { - test: /\.css$/, - loader: ExtractTextPlugin.extract('style-loader', 'css-loader') - }, { - test: /\.scss$/, - loader: ExtractTextPlugin.extract('style-loader', 'sass-loader') - }, { - test: /\.less$/, - loader: ExtractTextPlugin.extract('style-loader', 'less-loader') - }, { - test: require.resolve("js-sequence-diagrams"), - loader: "imports?Raphael=raphael" - }, { - test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, - loader: "file" - }, { - test: /\.(woff|woff2)$/, - loader: "url?prefix=font/&limit=5000" - }, { - test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, - loader: "url?limit=10000&mimetype=application/octet-stream" - }, { - test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, - loader: "url?limit=10000&mimetype=image/svg+xml" - }] - }, - - node: { - fs: "empty" - } -}; +module.exports = baseConfig; diff --git a/webpack.production.js b/webpack.production.js new file mode 100644 index 0000000..f4125ce --- /dev/null +++ b/webpack.production.js @@ -0,0 +1,36 @@ +var baseConfig = require('./webpackBaseConfig'); +var webpack = require('webpack'); +var ExtractTextPlugin = require("extract-text-webpack-plugin"); + +module.exports = Object.assign({}, baseConfig, { + plugins: [ + new webpack.ProvidePlugin({ + '_': 'lodash', + Visibility: "visibilityjs", + Cookies: "js-cookie", + emojify: "emojify.js", + io: "socket.io-client", + key: "keymaster" + }), + new webpack.DefinePlugin({ + "require.specified": "require.resolve" + }), + new ExtractTextPlugin("[name].css"), + new webpack.optimize.CommonsChunkPlugin({ + name: "vendor", + filename: "vendor.bundle.js", + minChunks: Infinity, + }), + new webpack.DefinePlugin({ + 'process.env': { + 'NODE_ENV': JSON.stringify('production') + } + }), + new webpack.optimize.UglifyJsPlugin({ + compress: { + warnings: false + }, + sourceMap: false + }) + ] +}); diff --git a/webpackBaseConfig.js b/webpackBaseConfig.js new file mode 100644 index 0000000..6d99381 --- /dev/null +++ b/webpackBaseConfig.js @@ -0,0 +1,94 @@ +var webpack = require('webpack'); +var path = require('path'); +var ExtractTextPlugin = require("extract-text-webpack-plugin"); + +module.exports = { + plugins: [ + new webpack.ProvidePlugin({ + '_': 'lodash', + Visibility: "visibilityjs", + Cookies: "js-cookie", + emojify: "emojify.js", + io: "socket.io-client", + key: "keymaster" + }), + new webpack.DefinePlugin({ + "require.specified": "require.resolve" + }), + new ExtractTextPlugin("[name].css"), + new webpack.optimize.CommonsChunkPlugin({ + name: "vendor", + filename: "vendor.bundle.js", + minChunks: Infinity, + }) + ], + + entry: { + index: path.join(__dirname, 'public/js/index.js'), + public: path.join(__dirname, 'public/js/public.js'), + slide: path.join(__dirname, 'public/js/slide.js'), + locale: path.join(__dirname, 'public/js/locale.js'), + vendor: [ + "expose?$!expose?jQuery!jquery", + "jquery-textcomplete", + "jquery-mousewheel", + "jquery-scrollspy/jquery-scrollspy", + "expose?LZString!lz-string", + "expose?filterXSS!xss", + "expose?Viz!viz.js", + "js-url", + "bootstrap" + ] + }, + + output: { + path: path.join(__dirname, 'public/build'), + filename: '[name].js' + }, + + resolve: { + root: [ + path.resolve(__dirname, 'src'), + path.resolve(__dirname, 'node_modules') + ], + extensions: ["", ".js"], + alias: { + 'jquery-ui': 'jquery-ui/ui/widgets' + } + }, + + module: { + loaders: [{ + test: /\.json$/, + loader: 'json-loader' + }, { + test: /\.css$/, + loader: ExtractTextPlugin.extract('style-loader', 'css-loader') + }, { + test: /\.scss$/, + loader: ExtractTextPlugin.extract('style-loader', 'sass-loader') + }, { + test: /\.less$/, + loader: ExtractTextPlugin.extract('style-loader', 'less-loader') + }, { + test: require.resolve("js-sequence-diagrams"), + loader: "imports?Raphael=raphael" + }, { + test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, + loader: "file" + }, { + test: /\.(woff|woff2)$/, + loader: "url?prefix=font/&limit=5000" + }, { + test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, + loader: "url?limit=10000&mimetype=application/octet-stream" + }, { + test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, + loader: "url?limit=10000&mimetype=image/svg+xml" + }] + }, + + node: { + fs: "empty" + } +};