@gdjiami/cli
Version:
CLI for build front end project.
79 lines (78 loc) • 3.29 kB
JavaScript
;
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;