const path = require('path'); const webpack = require('webpack'); const ExtractTextPlugin = require("extract-text-webpack-plugin"); const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const autoprefixer = require('autoprefixer'); const precss = require('precss'); const IS_EXTRACT_CSS = true; const env = process.env.NODE_ENV; const config = { devtool: 'source-map', output: { libraryTarget: 'var', library: '', umdNamedDefine: false }, module: { preLoaders: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'eslint-loader' } ], loaders: [ { test: /\.(js|jsx)$/, loader: 'babel-loader', exclude: /node_modules/, query: { cacheDirectory: path.join(process.cwd(), '.cache') } }, { test: /\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot)$/, loader: 'file-loader' } ] }, postcss: [ autoprefixer({ browsers: ['last 3 versions', '> 1%'] }), precss ], resolve: { extensions: ['', '.js', '.jsx', '.css', '.less'], alias: { 'common_path': path.join(__dirname, 'source/common'), 'modules_path': path.join(__dirname, 'source/modules'), 'pages_path': path.join(__dirname, 'source/pages') } }, externals: { 'react': 'window.React', 'react-dom': 'window.ReactDOM', './React': 'React', './ReactDOM': 'ReactDOM' }, plugins: [] }; if (IS_EXTRACT_CSS) { config.module.loaders.push( { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap!postcss-loader') }, { test: /\.less$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap!postcss-loader!less-loader') } ); config.plugins.push( new ExtractTextPlugin("[name].css") ); } else { config.module.loaders.push( { test: /\.css$/, loader: 'style-loader!css-loader?sourceMap!postcss-loader' }, { test: /\.less$/, loader: 'style-loader!css-loader?sourceMap!postcss-loader!less-loader' } ); } if (env !== 'develop') { config.plugins.push( new OptimizeCssAssetsPlugin({ cssProcessor: require('cssnano'), cssProcessorOptions: { discardComments: { removeAll: true } } }), new webpack.optimize.UglifyJsPlugin({ comments: false, compress: { warnings: false } }), new webpack.optimize.OccurrenceOrderPlugin() ); delete config.devtool; } module.exports = config;
|