UNPKG

roadhog-extra

Version:

Cli tool for serve and build react app, based on create-react-app, support JSON pattern config.

345 lines (299 loc) 10.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.node = exports.defaultDevtool = exports.spriteSvgLoader = exports.baseSvgLoader = undefined; 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.getBabelOptions = getBabelOptions; exports.getResolve = getResolve; exports.getFirstRules = getFirstRules; exports.getLastRules = getLastRules; exports.getCSSRules = getCSSRules; exports.getCommonPlugins = getCommonPlugins; var _webpack = require('webpack'); var _webpack2 = _interopRequireDefault(_webpack); var _fs = require('fs'); var _path = require('path'); var _extractTextWebpackPlugin = require('extract-text-webpack-plugin'); var _extractTextWebpackPlugin2 = _interopRequireDefault(_extractTextWebpackPlugin); var _copyWebpackPlugin = require('copy-webpack-plugin'); var _copyWebpackPlugin2 = _interopRequireDefault(_copyWebpackPlugin); var _htmlWebpackPlugin = require('html-webpack-plugin'); var _htmlWebpackPlugin2 = _interopRequireDefault(_htmlWebpackPlugin); var _normalizeDefine = require('../utils/normalizeDefine'); var _normalizeDefine2 = _interopRequireDefault(_normalizeDefine); var _winPath = require('../utils/winPath'); var _winPath2 = _interopRequireDefault(_winPath); var _runArray = require('../utils/runArray'); var _runArray2 = _interopRequireDefault(_runArray); 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); } } // import autoprefixer from 'autoprefixer'; function getBabelOptions(config) { return { babelrc: false, presets: [require.resolve('babel-preset-es2015'), require.resolve('babel-preset-react'), require.resolve('babel-preset-stage-0')].concat(config.extraBabelPresets || []), plugins: [require.resolve('babel-plugin-add-module-exports'), require.resolve('babel-plugin-react-require'), require.resolve('babel-plugin-syntax-dynamic-import')].concat(config.extraBabelPlugins || []), cacheDirectory: true }; } var baseSvgLoader = exports.baseSvgLoader = function baseSvgLoader(config) { return { test: /\.svg$/, loader: 'file', options: { name: (config.assetsPath && config.assetsPath.img ? config.assetsPath.img : 'assets/img/') + '/[name].[hash:8].[ext]' } }; }; var spriteSvgLoader = exports.spriteSvgLoader = { test: /\.(svg)$/i, loader: 'svg-sprite' }; var defaultDevtool = exports.defaultDevtool = '#cheap-module-eval-source-map'; function getResolve(config, paths) { return { resolve: { modules: [paths.appNodeModules, paths.ownNodeModules, 'node_modules'], extensions: [].concat(_toConsumableArray(config.extraResolveExtensions || []), ['.web.js', '.web.jsx', '.web.ts', '.web.tsx', '.js', '.json', '.jsx', '.ts', '.tsx']) }, resolveLoader: { modules: [paths.appNodeModules, paths.ownNodeModules], moduleExtensions: ['-loader'] } }; } function getFirstRules(_ref) { var config = _ref.config, paths = _ref.paths, babelOptions = _ref.babelOptions; return [{ oneOf: [{ test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/], loader: require.resolve('url-loader'), options: { limit: 10000, name: (config.assetsPath && config.assetsPath.img ? config.assetsPath.img : 'assets/img/') + '[name].[hash:8].[ext]' } }, { exclude: [/\.(html|ejs)$/, /\.(js|jsx)$/, /\.(css|less|scss|sass)$/, /\.json$/, /\.svg$/, /\.tsx?$/], loader: 'url', options: { limit: 10000, name: (config.assetsPath && config.assetsPath.media ? config.assetsPath.media : 'assets/media/') + '[name].[hash:8].[ext]' } }, { test: /\.(js|jsx)$/, include: paths.appSrc, loader: 'babel', options: babelOptions }] }]; } function getLastRules(_ref2) { var paths = _ref2.paths, babelOptions = _ref2.babelOptions; return [{ test: /\.html$/, loader: 'file', options: { name: '[name].[ext]' } }, { test: /\.tsx?$/, include: paths.appSrc, use: [{ loader: 'babel', options: babelOptions }, { loader: 'awesome-typescript', options: { transpileOnly: true } }] }]; } function getCSSRules(env, _ref3) { var config = _ref3.config, paths = _ref3.paths, cssLoaders = _ref3.cssLoaders, theme = _ref3.theme; function isExclude(modulePath) { if (config.cssModulesExclude && config.cssModulesExclude.length) { return config.cssModulesExclude.some(function (item) { return (0, _winPath2.default)((0, _path.join)(paths.appDirectory, item)).indexOf((0, _winPath2.default)(modulePath)) > -1; }); } return false; } function includeTest(root, modulePath) { return modulePath.indexOf(root) > -1 && !isExclude(modulePath); } var rules = [{ test: /\.css$/, include: includeTest.bind(null, paths.appSrc), use: [require.resolve('style-loader')].concat(_toConsumableArray(cssLoaders.own)) }, { test: /\.less$/, include: includeTest.bind(null, paths.appSrc), use: ['style'].concat(_toConsumableArray(cssLoaders.own), [{ loader: 'less', options: { modifyVars: theme } }]) }, { test: /\.css$/, include: includeTest.bind(null, paths.appNodeModules), use: [require.resolve('style-loader')].concat(_toConsumableArray(cssLoaders.nodeModules)) }, { test: /\.less$/, include: includeTest.bind(null, paths.appNodeModules), use: [require.resolve('style-loader')].concat(_toConsumableArray(cssLoaders.nodeModules), [{ loader: 'less', options: { modifyVars: theme } }]) }]; if (config.cssModulesExclude && config.cssModulesExclude.length) { var include = config.cssModulesExclude.map(function (item) { return (0, _path.join)(paths.appDirectory, item); }); rules = [].concat(_toConsumableArray(rules), [{ test: /\.css$/, include: include, use: [require.resolve('style-loader')].concat(_toConsumableArray(cssLoaders.noCSSModules)) }, { test: /\.less$/, include: include, use: [require.resolve('style-loader')].concat(_toConsumableArray(cssLoaders.noCSSModules), [{ loader: 'less', options: { modifyVars: theme } }]) }]); } if (config.sass) { var sassOptions = config.sass === true ? {} : config.sass; rules = [].concat(_toConsumableArray(rules), [{ test: /\.(scss|sass)$/, include: includeTest.bind(null, paths.appSrc), use: [require.resolve('style-loader')].concat(_toConsumableArray(cssLoaders.own), [{ loader: 'sass', options: sassOptions }]) }, { test: /\.(scss|sass)$/, include: includeTest.bind(null, paths.appNodeModules), use: [require.resolve('style-loader')].concat(_toConsumableArray(cssLoaders.nodeModules), [{ loader: 'sass', options: sassOptions }]) }]); if (config.cssModulesExclude && config.cssModulesExclude.length) { var _include = config.cssModulesExclude.map(function (item) { return (0, _path.join)(paths.appDirectory, item); }); rules = [].concat(_toConsumableArray(rules), [{ test: /\.(scss|sass)$/, include: _include, use: ['style'].concat(_toConsumableArray(cssLoaders.noCSSModules), [{ loader: 'sass', options: sassOptions }]) }]); } } if (env === 'production') { rules.forEach(function (rule) { rule.use = _extractTextWebpackPlugin2.default.extract({ // fallback: 'style', use: rule.use.slice(1) }); }); } return rules; } var node = exports.node = { fs: 'empty', net: 'empty', tls: 'empty' }; function getCommonPlugins(_ref4) { var config = _ref4.config, paths = _ref4.paths, appBuild = _ref4.appBuild, NODE_ENV = _ref4.NODE_ENV; var ret = []; var defineObj = { 'process.env': { NODE_ENV: JSON.stringify(NODE_ENV) } }; if (config.define) { defineObj = _extends({}, defineObj, (0, _normalizeDefine2.default)(config.define)); } ret.push(new _webpack2.default.DefinePlugin(defineObj)); // HTML var defaultHtml = function defaultHtml() { ret.push(new _htmlWebpackPlugin2.default()); }; if (config.htmlTemplates) { if (config.htmlTemplates === true) { defaultHtml(); } else { (0, _runArray2.default)(config.htmlTemplates, function (h) { ret.push(new _htmlWebpackPlugin2.default(Object.assign({}, h))); }); } } else { defaultHtml(); } var copyConfig = []; if (NODE_ENV === 'production' && config.copyConfig) { (0, _runArray2.default)(config.copyConfig, function (c) { copyConfig.push(c); }); } else { if ((0, _fs.existsSync)(paths.appPublic)) { copyConfig.push({ from: paths.appPublic, to: appBuild }); } } if (copyConfig && copyConfig.length > 0) { ret.push(new _copyWebpackPlugin2.default(copyConfig)); } if (config.multipage) { // Support hash var name = config.hash ? 'common.[hash]' : 'common'; ret.push(new _webpack2.default.optimize.CommonsChunkPlugin({ name: 'common', filename: (config.assetsPath && config.assetsPath.js ? config.assetsPath.js : 'assets/js/') + (name + '.js') })); } if (config.ignoreMomentLocale) { ret.push(new _webpack2.default.IgnorePlugin(/^\.\/locale$/, /moment$/)); } /*ret.push(new webpack.LoaderOptionsPlugin({ options: { context: __dirname, postcss: [ autoprefixer(config.autoprefixer || { browsers: [ '>1%', 'last 4 versions', 'Firefox ESR', 'not ie < 9', // React doesn't support IE8 anyway ], flexbox: 'no-2009', }), ...(config.extraPostCSSPlugins ? config.extraPostCSSPlugins : []), ], }, }));*/ return ret; }