@tarojs/mini-runner
Version:
Mini app runner for taro
201 lines • 8.63 kB
JavaScript
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
;