const webpack = require('webpack') const webpackMiddleware = require('webpack-dev-middleware') const webpackHotMiddleware = require('webpack-hot-middleware') const path = require('path') const ExtractTextPlugin = require(“extract-text-webpack-plugin”) const AssetsPlugin = require('assets-webpack-plugin') const StatsPlugin = require('stats-webpack-plugin'); const assetsPluginInstance = new AssetsPlugin()
let scssLoader; if(process.env.NODE_ENV === 'prodution'){
scssLoader = { test: /\.scss$/, loader: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader?sourceMap!autoprefixer-loader!sass-loader?sourceMap' }) }
} else {
scssLoader = { test: /\.scss$/, use: [ { loader: "style-loader" }, { loader: "css-loader" }, { loader: "sass-loader" } ] }
}
const loaders = {
loaders: [ scssLoader, { test: /\.styl$/, loader: 'style-loader!css-loader!stylus-loader' }, { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel-loader', query: { presets: ["es2015","react","stage-0"] } }, { test: /\.coffee$/, loader: "coffee-loader" }, { test: /\.(coffee\.md|litcoffee)$/, loader: "coffee-loader?literate" }, { test: /\.(woff|woff2|ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: 'base64-font-loader' }, { test: /.*\.(gif|png|jpe?g|svg)$/i, loaders: [ 'file-loader?hash=sha512&digest=hex&name=[hash].[ext]' ] } ]
}
const devConfig = {
devtool: 'eval-source-map', entry: [ 'webpack-hot-middleware/client?reload=true', path.resolve(__dirname, "./assets/js/index.js") ], output: { path: path.join(__dirname, "./build/"), filename: 'client.js', publicPath: '/assets/' }, plugins: [ new webpack.optimize.OccurrenceOrderPlugin(), new webpack.HotModuleReplacementPlugin(), new webpack.NoEmitOnErrorsPlugin(), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('development') }) ], module: loaders
}
var compiler = webpack(devConfig); var middleware = webpackMiddleware(compiler, {
publicPath: devConfig.output.publicPath, contentBase: 'src', stats: { colors: true, hash: false, timings: true, chunks: false, chunkModules: false, modules: false }
})
const webpackDev = function(app){
app.use(middleware); app.use(webpackHotMiddleware(compiler));
}
module.exports = {
prod: { entry: [ path.resolve(__dirname, "./src/index.js") ], output: { path: path.join(__dirname, "../build/"), filename: 'client[hash].js', publicPath: '/assets/' }, plugins: [ new webpack.optimize.OccurrenceOrderPlugin(), new webpack.optimize.UglifyJsPlugin({ compressor: { warnings: false, screw_ie8: true } }), new StatsPlugin('webpack.stats.json', { source: false, modules: false }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }), new webpack.ProvidePlugin({ "React": "react", }), new ExtractTextPlugin("client[hash].css") ], module: loaders }, serverConfig: function(app){ // assets urls let hash = ''; if(process.env.NODE_ENV === "production"){ const webpackClientPath = path.resolve(__dirname, './build/webpack.stats.json') const clientConfig = JSON.parse(fs.readFileSync(webpackClientPath, 'utf8')) hash = clientConfig.hash app.use('/assets', express.static('build')) } else { webpackDev(app) } // images urls let prefix = 'https://cl.svc.store' prefix += process.env.NODE_ENV === "production" ? '' : 'store-dev' const imgUrl = (command,id) => { return prefix + '/' + command + '/' + id } app.use( (req, res, next) => { res.locals.hash = hash res.locals.env = process.env.NODE_ENV res.locals.imgUrl = imgUrl next() }) }
}