| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- /**
- * React Starter Kit (https://www.reactstarterkit.com/)
- *
- * Copyright © 2014-2016 Kriasoft, LLC. All rights reserved.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE.txt file in the root directory of this source tree.
- */
- import path from 'path';
- import webpack from 'webpack';
- import extend from 'extend';
- import AssetsPlugin from 'assets-webpack-plugin';
- const DEBUG = !process.argv.includes('--release');
- const VERBOSE = process.argv.includes('--verbose');
- const AUTOPREFIXER_BROWSERS = [
- 'Android 2.3',
- 'Android >= 4',
- 'Chrome >= 35',
- 'Firefox >= 31',
- 'Explorer >= 9',
- 'iOS >= 7',
- 'Opera >= 12',
- 'Safari >= 7.1',
- ];
- const GLOBALS = {
- 'process.env.NODE_ENV': DEBUG ? '"development"' : '"production"',
- __DEV__: DEBUG,
- };
- //
- // Common configuration chunk to be used for both
- // client-side (client.js) and server-side (server.js) bundles
- // -----------------------------------------------------------------------------
- const config = {
- output: {
- publicPath: '/',
- sourcePrefix: ' ',
- },
- cache: DEBUG,
- debug: DEBUG,
- stats: {
- colors: true,
- reasons: DEBUG,
- hash: VERBOSE,
- version: VERBOSE,
- timings: true,
- chunks: VERBOSE,
- chunkModules: VERBOSE,
- cached: VERBOSE,
- cachedAssets: VERBOSE,
- },
- plugins: [
- new webpack.optimize.OccurenceOrderPlugin(),
- ],
- resolve: {
- extensions: ['', '.webpack.js', '.web.js', '.js', '.jsx', '.json'],
- },
- module: {
- loaders: [
- {
- test: /\.jsx?$/,
- include: [
- path.resolve(__dirname, '../node_modules/react-routing/src'),
- path.resolve(__dirname, '../src'),
- ],
- loader: 'babel-loader',
- }, {
- test: /\.scss$/,
- loaders: [
- 'isomorphic-style-loader',
- `css-loader?${DEBUG ? 'sourceMap&' : 'minimize&'}modules&localIdentName=` +
- `${DEBUG ? '[name]_[local]_[hash:base64:3]' : '[hash:base64:4]'}`,
- 'postcss-loader?parser=postcss-scss',
- ],
- }, {
- test: /\.json$/,
- loader: 'json-loader',
- }, {
- test: /\.txt$/,
- loader: 'raw-loader',
- }, {
- test: /\.(png|jpg|jpeg|gif|woff|woff2)$/,
- loader: 'url-loader?limit=10000',
- }, {
- test: /\.(eot|ttf|wav|mp3)$/,
- loader: 'file-loader',
- }, {
- test: /\.jade$/,
- loader: 'jade-loader',
- },
- { test: /\.svg$/, loader: 'babel?presets[]=es2015,presets[]=react!svg-react' }
- ],
- },
- postcss: function plugins(bundler) {
- return [
- require('postcss-import')({ addDependencyTo: bundler }),
- require('precss')(),
- require('autoprefixer')({ browsers: AUTOPREFIXER_BROWSERS }),
- ];
- },
- };
- //
- // Configuration for the client-side bundle (client.js)
- // -----------------------------------------------------------------------------
- const clientConfig = extend(true, {}, config, {
- entry: './src/client.js',
- output: {
- path: path.join(__dirname, '../build/public'),
- filename: DEBUG ? '[name].js?[hash]' : '[name].[hash].js',
- },
- // Choose a developer tool to enhance debugging
- // http://webpack.github.io/docs/configuration.html#devtool
- devtool: DEBUG ? 'cheap-module-eval-source-map' : false,
- plugins: [
- ...config.plugins,
- new webpack.DefinePlugin({
- ...GLOBALS,
- 'process.env.BROWSER': true,
- 'process.env.CORIOLIS_URL': JSON.stringify(process.env.CORIOLIS_URL)
- }),
- new AssetsPlugin({
- path: path.join(__dirname, '../build'),
- filename: 'assets.js',
- processOutput: x => `module.exports = ${JSON.stringify(x)};`,
- }),
- ...(!DEBUG ? [
- new webpack.optimize.DedupePlugin(),
- new webpack.optimize.UglifyJsPlugin({
- compress: {
- // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
- screw_ie8: true,
- // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
- warnings: VERBOSE,
- },
- }),
- new webpack.optimize.AggressiveMergingPlugin(),
- ] : []),
- ],
- });
- //
- // Configuration for the server-side bundle (server.js)
- // -----------------------------------------------------------------------------
- const serverConfig = extend(true, {}, config, {
- entry: './src/server.js',
- output: {
- path: './build',
- filename: 'server.js',
- libraryTarget: 'commonjs2',
- },
- target: 'node',
- externals: [
- /^\.\/assets$/,
- function filter(context, request, cb) {
- const isExternal =
- request.match(/^[@a-z][a-z\/\.\-0-9]*$/i) &&
- !request.match(/^react-routing/) &&
- !context.match(/[\\/]react-routing/);
- cb(null, Boolean(isExternal));
- },
- ],
- node: {
- console: false,
- global: false,
- process: false,
- Buffer: false,
- __filename: false,
- __dirname: false,
- },
- devtool: 'source-map',
- plugins: [
- ...config.plugins,
- new webpack.DefinePlugin({ ...GLOBALS, 'process.env.BROWSER': false,
- 'process.env.CORIOLIS_URL': JSON.stringify(process.env.CORIOLIS_URL) }),
- new webpack.BannerPlugin('require("source-map-support").install();',
- { raw: true, entryOnly: false }),
- ],
- });
- export default [clientConfig, serverConfig];
|