UNPKG

@tarojs/mini-runner

Version:

Mini app runner for taro

201 lines 8.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const helper_1 = require("@tarojs/helper"); const shared_1 = require("@tarojs/shared"); const path = require("path"); const MiniPlugin_1 = require("../plugins/MiniPlugin"); const component_1 = require("../template/component"); const base_conf_1 = require("./base.conf"); const chain_1 = require("./chain"); exports.default = (appPath, mode, config) => { var _a; const chain = (0, base_conf_1.default)(appPath); const { buildAdapter = helper_1.PLATFORMS.WEAPP, alias = {}, entry = {}, output = {}, fileType = { style: '.wxss', config: '.json', script: '.js', templ: '.wxml' }, globalObject = 'wx', outputRoot = 'dist', sourceRoot = 'src', isBuildPlugin = false, runtimePath, taroComponentsPath, designWidth = 750, deviceRatio, enableSourceMap = process.env.NODE_ENV !== 'production', sourceMapType, baseLevel = 16, framework = 'nerv', frameworkExts, prerender, minifyXML = {}, hot = false, defineConstants = {}, runtime = {}, env = {}, cssLoaderOption = {}, sassLoaderOption = {}, lessLoaderOption = {}, stylusLoaderOption = {}, mediaUrlLoaderOption = {}, fontUrlLoaderOption = {}, imageUrlLoaderOption = {}, miniCssExtractPluginOption = {}, postcss = {}, nodeModulesPath, isBuildQuickapp = false, template, quickappJSON, csso, terser, commonChunks, addChunkPages, optimizeMainPackage = { enable: false }, blended, isBuildNativeComp, modifyMiniConfigs, modifyBuildAssets, onCompilerMake, onParseCreateElement, skipProcessUsingComponents } = config; (_a = config.modifyComponentConfig) === null || _a === void 0 ? void 0 : _a.call(config, component_1.componentConfig, config); let { copy } = config; const plugin = {}; const minimizer = []; const sourceDir = path.join(appPath, sourceRoot); const outputDir = path.join(appPath, outputRoot); const taroBaseReg = /@tarojs[\\/][a-z]+/; if (isBuildPlugin) { const patterns = copy ? copy.patterns : []; patterns.push({ from: path.join(sourceRoot, 'plugin', 'doc'), to: path.join(outputRoot, 'doc') }); copy = Object.assign({}, copy, { patterns }); } if (copy) { plugin.copyWebpackPlugin = (0, chain_1.getCopyWebpackPlugin)({ copy, appPath }); } alias[helper_1.taroJsComponents + '$'] = taroComponentsPath || `${helper_1.taroJsComponents}/mini`; env.FRAMEWORK = JSON.stringify(framework); env.TARO_ENV = JSON.stringify(buildAdapter); env.TARO_PLATFORM = JSON.stringify(process.env.TARO_PLATFORM || shared_1.PLATFORM_TYPE.MINI); env.SUPPORT_TARO_POLYFILL = env.SUPPORT_TARO_POLYFILL || '"enabled"'; const runtimeConstants = (0, chain_1.getRuntimeConstants)(runtime); const constantsReplaceList = (0, chain_1.mergeOption)([(0, chain_1.processEnvOption)(env), defineConstants, runtimeConstants]); const entryRes = (0, chain_1.getEntry)({ sourceDir, entry, isBuildPlugin }); const defaultCommonChunks = isBuildPlugin ? ['plugin/runtime', 'plugin/vendors', 'plugin/taro', 'plugin/common'] : ['runtime', 'vendors', 'taro', 'common']; let customCommonChunks = defaultCommonChunks; if ((0, shared_1.isFunction)(commonChunks)) { customCommonChunks = commonChunks(defaultCommonChunks.concat()) || defaultCommonChunks; } else if ((0, shared_1.isArray)(commonChunks) && commonChunks.length) { customCommonChunks = commonChunks; } plugin.definePlugin = (0, chain_1.getDefinePlugin)([constantsReplaceList]); /** 需要在miniPlugin前,否则无法获取entry地址 */ if (optimizeMainPackage.enable) { plugin.miniSplitChunksPlugin = (0, chain_1.getMiniSplitChunksPlugin)(Object.assign(Object.assign({}, optimizeMainPackage), { fileType })); } const miniPluginOptions = { sourceDir, outputDir, constantsReplaceList, nodeModulesPath, isBuildQuickapp, template, fileType, quickappJSON, designWidth, deviceRatio, pluginConfig: entryRes.pluginConfig, pluginMainEntry: entryRes.pluginMainEntry, isBuildPlugin: Boolean(isBuildPlugin), skipProcessUsingComponents, commonChunks: customCommonChunks, baseLevel, framework, frameworkExts, prerender, addChunkPages, modifyMiniConfigs, modifyBuildAssets, onCompilerMake, onParseCreateElement, minifyXML, runtimePath, blended, isBuildNativeComp, alias, hot }; plugin.miniPlugin = !isBuildNativeComp ? (0, chain_1.getMiniPlugin)(miniPluginOptions) : (0, chain_1.getBuildNativePlugin)(miniPluginOptions); plugin.miniCssExtractPlugin = (0, chain_1.getMiniCssExtractPlugin)([{ filename: `[name]${fileType.style}`, chunkFilename: `[name]${fileType.style}` }, miniCssExtractPluginOption]); plugin.providerPlugin = (0, chain_1.getProviderPlugin)({ window: ['@tarojs/runtime', 'window'], document: ['@tarojs/runtime', 'document'], navigator: ['@tarojs/runtime', 'navigator'], requestAnimationFrame: ['@tarojs/runtime', 'requestAnimationFrame'], cancelAnimationFrame: ['@tarojs/runtime', 'cancelAnimationFrame'], Element: ['@tarojs/runtime', 'TaroElement'], SVGElement: ['@tarojs/runtime', 'SVGElement'], MutationObserver: ['@tarojs/runtime', 'MutationObserver'], history: ['@tarojs/runtime', 'history'], location: ['@tarojs/runtime', 'location'], URLSearchParams: ['@tarojs/runtime', 'URLSearchParams'], URL: ['@tarojs/runtime', 'URL'], }); const isCssoEnabled = !((csso && csso.enable === false)); const isTerserEnabled = !((terser && terser.enable === false)); if (mode === 'production') { if (isTerserEnabled) { minimizer.push((0, chain_1.getTerserPlugin)([ enableSourceMap, terser ? terser.config : {} ])); } if (isCssoEnabled) { const cssoConfig = csso ? csso.config : {}; plugin.cssoWebpackPlugin = (0, chain_1.getCssoWebpackPlugin)([cssoConfig]); } } chain.merge({ mode, devtool: (0, chain_1.getDevtool)(enableSourceMap, sourceMapType), entry: entryRes.entry, output: (0, chain_1.getOutput)(appPath, [{ outputRoot, publicPath: '/', globalObject }, output]), target: (0, MiniPlugin_1.createTarget)({ framework }), resolve: { alias }, module: (0, chain_1.getModule)(appPath, { sourceDir, buildAdapter, isBuildQuickapp, // constantsReplaceList, designWidth, deviceRatio, enableSourceMap, compile: config.compile || {}, cssLoaderOption, lessLoaderOption, sassLoaderOption, stylusLoaderOption, fontUrlLoaderOption, imageUrlLoaderOption, mediaUrlLoaderOption, postcss, fileType }), plugin, optimization: { usedExports: true, minimizer, runtimeChunk: { name: isBuildPlugin ? 'plugin/runtime' : 'runtime' }, splitChunks: { chunks: 'all', maxInitialRequests: Infinity, minSize: 0, cacheGroups: { common: { name: isBuildPlugin ? 'plugin/common' : 'common', minChunks: 2, priority: 1 }, vendors: { name: isBuildPlugin ? 'plugin/vendors' : 'vendors', minChunks: 2, test: module => { return /[\\/]node_modules[\\/]/.test(module.resource); }, priority: 10 }, taro: { name: isBuildPlugin ? 'plugin/taro' : 'taro', test: module => { return taroBaseReg.test(module.context); }, priority: 100 } } } } }); return chain; }; //# sourceMappingURL=build.conf.js.map