Created
January 26, 2017 21:20
-
-
Save sorenjuul/a43b7a9d09b813bbf76a2e7c806f3cc0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// For info about this file refer to webpack and webpack-hot-middleware documentation | |
// For info on how we're generating bundles with hashed filenames for cache busting: https://medium.com/@okonetchnikov/long-term-caching-of-static-assets-with-webpack-1ecb139adb95#.w99i89nsz | |
import webpack from 'webpack'; | |
import ExtractTextPlugin from 'extract-text-webpack-plugin'; | |
import WebpackMd5Hash from 'webpack-md5-hash'; | |
import HtmlWebpackPlugin from 'html-webpack-plugin'; | |
import autoprefixer from 'autoprefixer'; | |
import path from 'path'; | |
const GLOBALS = { | |
'process.env.NODE_ENV': JSON.stringify('production'), | |
__DEV__: false | |
}; | |
export default { | |
resolve: { | |
extensions: ['', '.js', '.jsx', '.json'] | |
}, | |
debug: true, | |
devtool: 'source-map', // more info:https://webpack.github.io/docs/build-performance.html#sourcemaps and https://webpack.github.io/docs/configuration.html#devtool | |
noInfo: true, // set to false to see a list of every file being bundled. | |
entry: { | |
vendor: [ | |
"object-assign", | |
"react", | |
"react-dom", | |
"react-redux", | |
"react-router", | |
"react-router-redux", | |
"redux", | |
"redux-thunk" | |
], | |
app: path.resolve(__dirname, 'src/index') | |
}, | |
target: 'web', // necessary per https://webpack.github.io/docs/testing.html#compile-and-test | |
output: { | |
path: path.resolve(__dirname, 'dist'), | |
publicPath: '/', | |
filename: '[name].[chunkhash].js' | |
}, | |
plugins: [ | |
new webpack.optimize.CommonsChunkPlugin({ | |
name: "vendor", | |
// filename: "vendor.js" | |
// (Give the chunk a different name) | |
minChunks: Infinity, | |
// (with more entries, this ensures that no other module | |
// goes into the vendor chunk) | |
}), | |
// Hash the files using MD5 so that their names change when the content changes. | |
new WebpackMd5Hash(), | |
// Optimize the order that items are bundled. This assures the hash is deterministic. | |
new webpack.optimize.OccurenceOrderPlugin(), | |
// Tells React to build in prod mode. https://facebook.github.io/react/downloads.html | |
new webpack.DefinePlugin(GLOBALS), | |
// Generate an external css file with a hash in the filename | |
new ExtractTextPlugin('[name].[contenthash].css'), | |
// Generate HTML file that contains references to generated bundles. See here for how this works: https://github.com/ampedandwired/html-webpack-plugin#basic-usage | |
new HtmlWebpackPlugin({ | |
template: 'src/index.ejs', | |
minify: { | |
removeComments: true, | |
collapseWhitespace: true, | |
removeRedundantAttributes: true, | |
useShortDoctype: true, | |
removeEmptyAttributes: true, | |
removeStyleLinkTypeAttributes: true, | |
keepClosingSlash: true, | |
minifyJS: true, | |
minifyCSS: true, | |
minifyURLs: true | |
}, | |
inject: true, | |
// Note that you can add custom options here if you need to handle other custom logic in index.html | |
// To track JavaScript errors via TrackJS, sign up for a free trial at TrackJS.com and enter your token below. | |
trackJSToken: '' | |
}), | |
// Eliminate duplicate packages when generating bundle | |
new webpack.optimize.DedupePlugin(), | |
// Minify JS | |
new webpack.optimize.UglifyJsPlugin() | |
], | |
module: { | |
loaders: [ | |
{test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel'}, | |
{test: /\.eot(\?v=\d+.\d+.\d+)?$/, loader: 'url?name=[name].[ext]'}, | |
{test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'url?limit=10000&mimetype=application/font-woff&name=[name].[ext]'}, | |
{test: /\.[ot]tf(\?v=\d+.\d+.\d+)?$/, loader: 'url?limit=10000&mimetype=application/octet-stream&name=[name].[ext]'}, | |
{test: /\.svg(\?v=\d+.\d+.\d+)?$/, loader: 'url?limit=10000&mimetype=image/svg+xml&name=[name].[ext]'}, | |
{test: /\.(jpe?g|png|gif)$/i, loader: 'file?name=[name].[ext]'}, | |
{test: /\.ico$/, loader: 'file?name=[name].[ext]'}, | |
{test: /(\.css|\.scss)$/, loader: ExtractTextPlugin.extract('css?sourceMap!postcss!sass?sourceMap')}, | |
{test: /\.json$/, loader: "json"} | |
] | |
}, | |
postcss: ()=> [autoprefixer] | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment