Skip to content

Instantly share code, notes, and snippets.

Created March 31, 2017 07:32
Show Gist options
  • Save anonymous/f2df37ec2d91748243547431874935c5 to your computer and use it in GitHub Desktop.
Save anonymous/f2df37ec2d91748243547431874935c5 to your computer and use it in GitHub Desktop.

Revisions

  1. @invalid-email-address Anonymous created this gist Mar 31, 2017.
    116 changes: 116 additions & 0 deletions webpack.config.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,116 @@
    const webpack = require('webpack')
    const fs = require('fs')

    // NODE_ENV
    const nodeEnv = process.env.NODE_ENV || 'development'
    const isProd = nodeEnv === 'production'

    module.exports = (options) => {
    let entryFile, outputPath, isClient, isServer

    switch(options.side)
    {
    case 'client':
    entryFile = { client: './app/client.jsx' }
    outputPath = __dirname + '/app/public'
    isClient = true
    break

    case 'server':
    entryFile = { server: './app/server.js' }
    outputPath = __dirname + '/dist'
    isServer = true
    break
    }

    return {
    entry: entryFile,

    devtool: isProd ? 'source-map' : 'eval',

    output: {
    filename: '[name].bundle.js',
    path: outputPath
    },

    resolve: {
    extensions: ['.js', '.jsx', '.styl'],
    modules: ['node_modules', 'shared']
    },

    module: {
    rules: [
    {
    test: /\.jsx$/,
    exclude: /node_modules/,
    loader: "babel-loader",
    options: {
    presets: [
    ["env", { "targets": { "browsers": ["last 2 versions"] } }],
    'react',
    'stage-2'
    ]
    }
    },
    {
    test: /\.styl$/,
    use: [
    {
    loader: "style-loader"
    },
    {
    loader: "css-loader"
    },
    {
    loader: "postcss-loader",
    options: {
    plugins: () => {
    return [
    require('autoprefixer')({ browsers: 'last 2 versions' })
    ]
    }
    }
    },
    {
    loader: "stylus-loader"
    }
    ]
    }
    ]
    },

    externals: isServer ? fs.readdirSync(__dirname + '/node_modules')
    .concat([
    'react-dom/server'
    ])
    .reduce(function (ext, mod) {
    ext[mod] = 'commonjs ' + mod;
    return ext
    }, {}) : '',

    target: isServer ? 'node' : 'web',

    plugins: isProd ? [
    new webpack.DefinePlugin({ "process.env": { NODE_ENV: JSON.stringify('production') } }),
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({
    compress: {
    warnings: false,
    screw_ie8: true,
    conditionals: true,
    unused: true,
    comparisons: true,
    sequences: true,
    dead_code: true,
    evaluate: true,
    if_return: true,
    join_vars: true,
    },
    output: {
    comments: false
    },
    }),
    new webpack.LoaderOptionsPlugin({ minimize: true, debug: false })
    ] : []
    }
    }