UNPKG

saven

Version:
84 lines (83 loc) 3.47 kB
"use strict"; 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;