gridiron-example
Version:
Example webpack project for gridiron and related components. Showcases what can be done with gridiron.
64 lines (50 loc) • 3 kB
JavaScript
import { DefinePlugin, HotModuleReplacementPlugin, NoErrorsPlugin, SourceMapDevToolPlugin, ProvidePlugin, IgnorePlugin, optimize } from 'webpack'
import CompressionPlugin from 'compression-webpack-plugin'
import ExtractTextPlugin from 'extract-text-webpack-plugin'
import { StatsWriterPlugin } from 'webpack-stats-plugin'
import { server, client, baseUrl, IS_HOT } from '../config.js'
const { CommonsChunkPlugin, OccurenceOrderPlugin, DedupePlugin, UglifyJsPlugin } = optimize
const NODE_ENV = process.env.NODE_ENV || 'production'
const getDefinePlugin = name => new DefinePlugin( { __CLIENT__: true
, __SERVER__: false
, __SHIM__: name === 'shim'
, __HOT__: IS_HOT
, __BASEURL__: baseUrl
, __DEV__: server.flags.dev
, __PROD__: server.flags.prod
, 'process.env.NODE_ENV': `"${name === 'server' ? 'hot' : (NODE_ENV || 'development')}"`
} )
export const extractText = (loaders, options) => ExtractTextPlugin.extract('universal-style', loaders, options)
export default name => {
let plugins = []
//if((name === 'app' && !IS_HOT))// || name === 'server')
plugins.push(new ExtractTextPlugin('[name].css', { allChunks: true, disable: false }))
if(/^win/.test(process.platform))
plugins.push(new IgnorePlugin(/dtrace-provider/i))
plugins.push(getDefinePlugin(name))
if(!IS_HOT)
plugins.push(new DedupePlugin())
plugins.push(new OccurenceOrderPlugin())
if(name === 'app')
plugins.push(new CommonsChunkPlugin('commons', 'commons.js'))
if(name === 'app' && IS_HOT) {
plugins.push(new HotModuleReplacementPlugin())
plugins.push(new NoErrorsPlugin())
//plugins.push(new SourceMapDevToolPlugin('[file].map', null, '[absolute-resource-path]'))
}
if(server.flags.minify) { //|| name === 'server') {
plugins.push(new UglifyJsPlugin({ compress: { warnings: false } }))
// plugins.push(new CompressionPlugin( { asset: 'gz/{file}'
//, algorithm: 'gzip'
//, regExp: /\.(js|css|html|json|ico|eot|otf|ttf)$/
//, threshold: 10240
//, minRatio: 0.8
//, minRatio: 100
//} ))
}
/*
if(name === 'server') // Write out stats.json file to build directory.
plugins.push(new StatsWriterPlugin({ transform: ({ assetsByChunkName }) => ({ main: assetsByChunkName.main[0], css: assetsByChunkName.main[1] }) }))
*/
return plugins
}