UNPKG

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
'use strict'; 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'];