saven
Version:
84 lines (83 loc) • 3.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const path = require("path");
const util_1 = require("../util");
const chain_1 = require("../util/chain");
const base_conf_1 = require("./base.conf");
function default_1(config) {
const chain = base_conf_1.default();
const { alias = util_1.emptyObj, entry = util_1.emptyObj, output = util_1.emptyObj, sourceRoot = '', outputRoot, publicPath, staticDirectory = 'static', chunkDirectory = 'chunk', dllDirectory = 'lib', dllEntry = {
lib: ['nervjs', '@savenjs/saven-h5', '@savenjs/router', '@savenjs/components']
}, designWidth = 750, deviceRatio, enableSourceMap = false, enableExtract = true, enableDll = true, defineConstants = util_1.emptyObj, env = util_1.emptyObj, styleLoaderOption = util_1.emptyObj, cssLoaderOption = util_1.emptyObj, sassLoaderOption = util_1.emptyObj, lessLoaderOption = util_1.emptyObj, stylusLoaderOption = util_1.emptyObj, mediaUrlLoaderOption = util_1.emptyObj, fontUrlLoaderOption = util_1.emptyObj, imageUrlLoaderOption = util_1.emptyObj, miniCssExtractPluginOption = util_1.emptyObj, module = {
postcss: util_1.emptyObj
}, plugins } = config;
const plugin = {};
if (enableExtract) {
plugin.miniCssExtractPlugin = chain_1.getMiniCssExtractPlugin([{
filename: 'css/[name].css',
chunkFilename: 'css/[id].css'
}, miniCssExtractPluginOption]);
}
plugin.htmlWebpackPlugin = chain_1.getHtmlWebpackPlugin([{
filename: 'index.html',
template: path.join(util_1.appPath, sourceRoot, 'index.html')
}]);
plugin.definePlugin = chain_1.getDefinePlugin([chain_1.processEnvOption(env), defineConstants]);
if (enableDll) {
Object.assign(plugin, chain_1.getDllReferencePlugins({
dllDirectory,
dllEntry,
outputRoot
}));
const dllFiles = Object.keys(dllEntry).map(v => {
return path.join(dllDirectory, `${v}.dll.js`);
});
if (dllFiles.length) {
plugin.addAssetHtmlWebpackPlugin = chain_1.getHtmlWebpackIncludeAssetsPlugin({
append: false,
assets: dllFiles
});
}
}
const mode = 'production';
const minimizer = [];
const isUglifyEnabled = (plugins.uglify && plugins.uglify.enable === false)
? false
: true;
if (isUglifyEnabled) {
minimizer.push(chain_1.getUglifyPlugin([enableSourceMap, plugins.uglify ? plugins.uglify.config : {}]));
}
chain.merge({
mode,
devtool: chain_1.getDevtool(enableSourceMap),
entry: chain_1.getEntry(entry),
output: chain_1.getOutput([{
outputRoot,
publicPath,
chunkDirectory
}, output]),
resolve: { alias },
module: chain_1.getModule({
mode,
designWidth,
deviceRatio,
enableExtract,
enableSourceMap,
styleLoaderOption,
cssLoaderOption,
lessLoaderOption,
sassLoaderOption,
stylusLoaderOption,
fontUrlLoaderOption,
imageUrlLoaderOption,
mediaUrlLoaderOption,
module,
plugins,
staticDirectory
}),
plugin,
optimization: { minimizer }
});
return chain;
}
exports.default = default_1;