Skip to content

Instantly share code, notes, and snippets.

@waspar
Forked from anonymous/webpack.config.js
Created April 21, 2018 22:55
Show Gist options
  • Save waspar/3be8f50fd514b6f04e2f78cc4efc04a7 to your computer and use it in GitHub Desktop.
Save waspar/3be8f50fd514b6f04e2f78cc4efc04a7 to your computer and use it in GitHub Desktop.
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 })
] : []
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment