UNPKG

@gdjiami/cli

Version:

CLI for build front end project.

79 lines (78 loc) 3.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /** * 生成开发环境dll包, 提升开发环境编译速度 * * 配置: * + 默认dependencies下的包会被编译到DLL * + 使用jm.dll.exclude可以排除dependencies中的某些依赖被打包, 支持正则表达式, 如"/^@types/" * + 使用jm.dll.include 添加dependencies之外的依赖 * * > 可以使用DISABLE_DLL禁用dll包的编译和引用 */ var webpack_1 = tslib_1.__importDefault(require("webpack")); var path_1 = tslib_1.__importDefault(require("path")); var uniq_1 = tslib_1.__importDefault(require("lodash/uniq")); var pullAllWith_1 = tslib_1.__importDefault(require("lodash/pullAllWith")); var terserPluginOptions_1 = tslib_1.__importDefault(require("./utils/terserPluginOptions")); var optimizeCSSAssetsPlugin_1 = tslib_1.__importDefault(require("./utils/optimizeCSSAssetsPlugin")); var TerserPlugin = require('terser-webpack-plugin'); var OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); var JSONREGXP = /^\/(.*)\/$/; function isJsonRegexp(str) { return str.match(JSONREGXP); } var configure = function (env, pkg, paths, argv) { var jmOptions = argv.jmOptions; var isProduction = env.raw.NODE_ENV === 'production'; var shouldUseSourceMap = env.raw.SOURCE_MAP !== 'false'; function generateEntry() { // electron 模式使用 optionalDependencies var names = Object.keys((jmOptions.electron ? pkg.optionalDependencies : pkg.dependencies) || {}); var exclude = (argv.jmOptions.dll && argv.jmOptions.dll.exclude) || []; var include = (argv.jmOptions.dll && argv.jmOptions.dll.include) || []; var includeDependencies = uniq_1.default(names.concat(include)); return { dll: pullAllWith_1.default(includeDependencies, exclude, function (i, e) { var reg = isJsonRegexp(e); if (!!reg) { return !!i.match(new RegExp(reg[1])); } return i === e; }), }; } return { context: paths.appSrc, mode: env.raw.NODE_ENV, entry: generateEntry(), devtool: isProduction ? (shouldUseSourceMap ? 'cheap-source-map' : undefined) : 'cheap-module-source-map', output: { filename: '[name].js', path: paths.appCache, library: '[name]', }, plugins: [ new webpack_1.default.DllPlugin({ context: paths.appSrc, name: '[name]', path: path_1.default.join(paths.appCache, '[name].json'), }), new webpack_1.default.DefinePlugin(env.stringified), ], optimization: isProduction ? { minimize: true, minimizer: [ new TerserPlugin(terserPluginOptions_1.default(shouldUseSourceMap)), new OptimizeCSSAssetsPlugin(optimizeCSSAssetsPlugin_1.default(shouldUseSourceMap)), ], } : undefined, performance: { hints: false, }, }; }; exports.default = configure;