roadhogx
Version:
Cli tool for serve and build react app, based on roadhog, support JSON pattern config, support more features
154 lines (120 loc) • 6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = function (args, appBuild, config, paths) {
var debug = args.debug,
analyze = args.analyze;
var NODE_ENV = debug ? 'development' : process.env.NODE_ENV;
var _config$pwa = config.pwa,
pwa = _config$pwa === undefined ? false : _config$pwa,
_config$filename = config.filename,
filename = _config$filename === undefined ? '[name].js' : _config$filename,
_config$publicPath = config.publicPath,
publicPath = _config$publicPath === undefined ? './' : _config$publicPath,
_config$library = config.library,
library = _config$library === undefined ? null : _config$library,
_config$libraryTarget = config.libraryTarget,
libraryTarget = _config$libraryTarget === undefined ? 'var' : _config$libraryTarget,
_config$devtool = config.devtool,
devtool = _config$devtool === undefined ? debug ? _common.defaultDevtool : false : _config$devtool,
_config$chunkFilename = config.chunkFilename,
chunkFilename = _config$chunkFilename === undefined ? './[name].async.js' : _config$chunkFilename,
_config$extractCssNam = config.extractCssName,
extractCssName = _config$extractCssNam === undefined ? './[name].css' : _config$extractCssNam;
var babelOptions = (0, _common.getBabelOptions)(config);
var cssLoaders = (0, _getCSSLoaders2.default)(config);
var theme = (0, _getTheme2.default)(process.cwd(), config);
var output = {
path: appBuild,
filename: filename,
publicPath: publicPath,
libraryTarget: libraryTarget,
chunkFilename: chunkFilename
};
if (library) output.library = library;
var finalWebpackConfig = _extends({
bail: true,
devtool: devtool,
entry: (0, _getEntry2.default)(config, paths.appDirectory, /* isBuild */true),
output: output
}, (0, _common.getResolve)(config, paths), {
module: {
rules: [].concat(_toConsumableArray((0, _common.getFirstRules)({ paths: paths, babelOptions: babelOptions, config: config })), _toConsumableArray((0, _common.getCSSRules)('production', { paths: paths, cssLoaders: cssLoaders, theme: theme, config: config })), _toConsumableArray((0, _common.getLastRules)({ paths: paths, babelOptions: babelOptions })))
},
plugins: [
// ref: https://zhuanlan.zhihu.com/p/27980441
new _webpack2.default.optimize.ModuleConcatenationPlugin(), new _optimizeCssAssetsWebpackPlugin2.default({
cssProcessorOptions: {
reduceIdents: false,
discardComments: {
removeAll: true
}
},
canPrint: false
}), new _extractTextWebpackPlugin2.default(extractCssName)].concat(_toConsumableArray((0, _common.getCommonPlugins)({
config: config,
paths: paths,
appBuild: appBuild,
NODE_ENV: NODE_ENV
})), _toConsumableArray(debug ? [] : [new _webpack2.default.optimize.UglifyJsPlugin({
parallel: true,
uglifyOptions: {
compress: {
screw_ie8: true, // React doesn't support IE8
warnings: false,
drop_console: true,
pure_funcs: ['console.log']
},
mangle: {
screw_ie8: true
},
output: {
comments: false,
screw_ie8: true,
ascii_only: true
}
}
})]), _toConsumableArray(analyze ? [new _webpackVisualizerPlugin2.default()] : []), _toConsumableArray(pwa ? [new _offlinePlugin2.default({
autoUpdate: pwa.autoUpdate || 1000 * 60 * 60 * 5,
ServiceWorker: {
minify: true
},
AppCache: pwa.AppCache || false
})] : [])),
externals: config.externals,
node: _common.node
});
if (config.svgSpriteLoaderDirs) {
_common.baseSvgLoader.exclude = config.svgSpriteLoaderDirs;
_common.spriteSvgLoader.include = config.svgSpriteLoaderDirs;
finalWebpackConfig.module.rules.push(_common.baseSvgLoader);
finalWebpackConfig.module.rules.push(_common.spriteSvgLoader);
} else {
finalWebpackConfig.module.rules.push(_common.baseSvgLoader);
}
return (0, _addExtraBabelIncludes2.default)(finalWebpackConfig, paths, config.extraBabelIncludes, babelOptions);
};
var _webpack = require('webpack');
var _webpack2 = _interopRequireDefault(_webpack);
var _optimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin');
var _optimizeCssAssetsWebpackPlugin2 = _interopRequireDefault(_optimizeCssAssetsWebpackPlugin);
var _extractTextWebpackPlugin = require('extract-text-webpack-plugin');
var _extractTextWebpackPlugin2 = _interopRequireDefault(_extractTextWebpackPlugin);
var _webpackVisualizerPlugin = require('webpack-visualizer-plugin');
var _webpackVisualizerPlugin2 = _interopRequireDefault(_webpackVisualizerPlugin);
var _offlinePlugin = require('offline-plugin');
var _offlinePlugin2 = _interopRequireDefault(_offlinePlugin);
var _getEntry = require('../utils/getEntry');
var _getEntry2 = _interopRequireDefault(_getEntry);
var _getTheme = require('../utils/getTheme');
var _getTheme2 = _interopRequireDefault(_getTheme);
var _getCSSLoaders = require('../utils/getCSSLoaders');
var _getCSSLoaders2 = _interopRequireDefault(_getCSSLoaders);
var _addExtraBabelIncludes = require('../utils/addExtraBabelIncludes');
var _addExtraBabelIncludes2 = _interopRequireDefault(_addExtraBabelIncludes);
var _common = require('./common');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
module.exports = exports['default'];