16a23e08bSopenharmony_ci/* 26a23e08bSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 36a23e08bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 46a23e08bSopenharmony_ci * you may not use this file except in compliance with the License. 56a23e08bSopenharmony_ci * You may obtain a copy of the License at 66a23e08bSopenharmony_ci * 76a23e08bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 86a23e08bSopenharmony_ci * 96a23e08bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 106a23e08bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 116a23e08bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126a23e08bSopenharmony_ci * See the License for the specific language governing permissions and 136a23e08bSopenharmony_ci * limitations under the License. 146a23e08bSopenharmony_ci */ 156a23e08bSopenharmony_ci 166a23e08bSopenharmony_civar path = require('path') 176a23e08bSopenharmony_civar fs = require('fs') 186a23e08bSopenharmony_ci 196a23e08bSopenharmony_civar ResourcePlugin = require('./lib/resource-plugin') 206a23e08bSopenharmony_civar ResultStates = require('./lib/compile-plugin') 216a23e08bSopenharmony_civar GenBinPlugin = require('./lib/genBin-plugin') 226a23e08bSopenharmony_civar GenAbcPlugin = require('./lib/genAbc-plugin').GenAbcPlugin 236a23e08bSopenharmony_civar AfterEmitPlugin = require('./lib/cardJson-plugin').AfterEmitPlugin 246a23e08bSopenharmony_ciconst ReadJsonPlugin = require('./lib/read-json-plugin') 256a23e08bSopenharmony_ci 266a23e08bSopenharmony_ciconst { PLATFORM }= require('./lib/lite/lite-enum') 276a23e08bSopenharmony_ciconst util = require('./lib/util') 286a23e08bSopenharmony_ciconst TerserPlugin = require('terser-webpack-plugin') 296a23e08bSopenharmony_ciconst CopyPlugin = require("copy-webpack-plugin") 306a23e08bSopenharmony_ciconst webpack = require('webpack') 316a23e08bSopenharmony_cilet watchMode = (process.env.watchMode && process.env.watchMode === 'true') || false 326a23e08bSopenharmony_ciconst { 336a23e08bSopenharmony_ci deleteFolderRecursive, 346a23e08bSopenharmony_ci readManifest, 356a23e08bSopenharmony_ci loadEntryObj, 366a23e08bSopenharmony_ci hashProjectPath, 376a23e08bSopenharmony_ci checkMultiResourceBuild, 386a23e08bSopenharmony_ci readWorkerFile, 396a23e08bSopenharmony_ci compareCache, 406a23e08bSopenharmony_ci parseAbilityName 416a23e08bSopenharmony_ci} = require('./main.product') 426a23e08bSopenharmony_ci 436a23e08bSopenharmony_ciconst richModule = { 446a23e08bSopenharmony_ci rules: [ 456a23e08bSopenharmony_ci { 466a23e08bSopenharmony_ci test: /\.visual$/, 476a23e08bSopenharmony_ci use: [{ 486a23e08bSopenharmony_ci loader: path.resolve(__dirname, './lib/loader-gen.js') 496a23e08bSopenharmony_ci }] 506a23e08bSopenharmony_ci }, 516a23e08bSopenharmony_ci { 526a23e08bSopenharmony_ci test: /(\.hml)(\?[^?]+)?$/, 536a23e08bSopenharmony_ci use: [{ 546a23e08bSopenharmony_ci loader: path.resolve(__dirname, './index.js') 556a23e08bSopenharmony_ci }] 566a23e08bSopenharmony_ci }, 576a23e08bSopenharmony_ci { 586a23e08bSopenharmony_ci test: /\.png$/, 596a23e08bSopenharmony_ci use: [{ 606a23e08bSopenharmony_ci loader: 'file-loader', 616a23e08bSopenharmony_ci options: { 626a23e08bSopenharmony_ci name: '[name].[ext]', 636a23e08bSopenharmony_ci outputPath: 'common' 646a23e08bSopenharmony_ci } 656a23e08bSopenharmony_ci }] 666a23e08bSopenharmony_ci }, 676a23e08bSopenharmony_ci { 686a23e08bSopenharmony_ci test: /\.css$/, 696a23e08bSopenharmony_ci use: [{ 706a23e08bSopenharmony_ci loader: 'css-loader' 716a23e08bSopenharmony_ci }] 726a23e08bSopenharmony_ci }, 736a23e08bSopenharmony_ci { 746a23e08bSopenharmony_ci test: /\.less$/, 756a23e08bSopenharmony_ci use: [{ 766a23e08bSopenharmony_ci loader: 'less-loader' 776a23e08bSopenharmony_ci }] 786a23e08bSopenharmony_ci }, 796a23e08bSopenharmony_ci { 806a23e08bSopenharmony_ci test: /\.(scss|sass)$/, 816a23e08bSopenharmony_ci use: [{ 826a23e08bSopenharmony_ci loader: 'style-loader!css-loader!sass-loader' 836a23e08bSopenharmony_ci }] 846a23e08bSopenharmony_ci }, 856a23e08bSopenharmony_ci { 866a23e08bSopenharmony_ci test: /\.jsx?$/, 876a23e08bSopenharmony_ci type: 'javascript/auto', 886a23e08bSopenharmony_ci use: [ 896a23e08bSopenharmony_ci { 906a23e08bSopenharmony_ci loader: path.resolve(__dirname, 'lib/module-script.js') 916a23e08bSopenharmony_ci }, 926a23e08bSopenharmony_ci { 936a23e08bSopenharmony_ci loader: util.loadBabelModule('babel-loader'), 946a23e08bSopenharmony_ci options: { 956a23e08bSopenharmony_ci presets: [util.loadBabelModule('@babel/preset-env')], 966a23e08bSopenharmony_ci targets: 'node 8', 976a23e08bSopenharmony_ci plugins: [ 986a23e08bSopenharmony_ci [ 996a23e08bSopenharmony_ci util.loadBabelModule('@babel/plugin-transform-modules-commonjs'), 1006a23e08bSopenharmony_ci {'allowTopLevelThis': true} 1016a23e08bSopenharmony_ci ], 1026a23e08bSopenharmony_ci util.loadBabelModule('@babel/plugin-proposal-class-properties') 1036a23e08bSopenharmony_ci ], 1046a23e08bSopenharmony_ci compact: false 1056a23e08bSopenharmony_ci } 1066a23e08bSopenharmony_ci } 1076a23e08bSopenharmony_ci ] 1086a23e08bSopenharmony_ci } 1096a23e08bSopenharmony_ci ] 1106a23e08bSopenharmony_ci} 1116a23e08bSopenharmony_ci 1126a23e08bSopenharmony_ciconst cardModule = { 1136a23e08bSopenharmony_ci rules: [ 1146a23e08bSopenharmony_ci { 1156a23e08bSopenharmony_ci test: /\.visual$/, 1166a23e08bSopenharmony_ci use: [{ 1176a23e08bSopenharmony_ci loader: path.resolve(__dirname, './lib/loader-gen.js') 1186a23e08bSopenharmony_ci }] 1196a23e08bSopenharmony_ci }, 1206a23e08bSopenharmony_ci { 1216a23e08bSopenharmony_ci test: /\.hml$/, 1226a23e08bSopenharmony_ci use: [{ 1236a23e08bSopenharmony_ci loader: path.resolve(__dirname, './lib/card-loader.js') 1246a23e08bSopenharmony_ci }] 1256a23e08bSopenharmony_ci }, 1266a23e08bSopenharmony_ci { 1276a23e08bSopenharmony_ci test: /\.css$/, 1286a23e08bSopenharmony_ci use: [{ 1296a23e08bSopenharmony_ci loader: 'css-loader' 1306a23e08bSopenharmony_ci }] 1316a23e08bSopenharmony_ci }, 1326a23e08bSopenharmony_ci { 1336a23e08bSopenharmony_ci test: /\.less$/, 1346a23e08bSopenharmony_ci use: [{ 1356a23e08bSopenharmony_ci loader: 'less-loader' 1366a23e08bSopenharmony_ci }] 1376a23e08bSopenharmony_ci }, 1386a23e08bSopenharmony_ci { 1396a23e08bSopenharmony_ci test: /\.(scss|sass)$/, 1406a23e08bSopenharmony_ci use: [{ 1416a23e08bSopenharmony_ci loader: 'css-loader!sass-loader' 1426a23e08bSopenharmony_ci }] 1436a23e08bSopenharmony_ci }, 1446a23e08bSopenharmony_ci { 1456a23e08bSopenharmony_ci test: /\.jsx?$/, 1466a23e08bSopenharmony_ci type: 'javascript/auto', 1476a23e08bSopenharmony_ci use: [ 1486a23e08bSopenharmony_ci { 1496a23e08bSopenharmony_ci loader: path.resolve(__dirname, 'lib/module-script.js') 1506a23e08bSopenharmony_ci }, 1516a23e08bSopenharmony_ci { 1526a23e08bSopenharmony_ci loader: util.loadBabelModule('babel-loader'), 1536a23e08bSopenharmony_ci options: { 1546a23e08bSopenharmony_ci presets: [util.loadBabelModule('@babel/preset-env')], 1556a23e08bSopenharmony_ci targets: 'node 8', 1566a23e08bSopenharmony_ci plugins: [util.loadBabelModule('@babel/plugin-transform-modules-commonjs'), 1576a23e08bSopenharmony_ci util.loadBabelModule('@babel/plugin-proposal-class-properties')], 1586a23e08bSopenharmony_ci compact: false 1596a23e08bSopenharmony_ci } 1606a23e08bSopenharmony_ci } 1616a23e08bSopenharmony_ci ] 1626a23e08bSopenharmony_ci } 1636a23e08bSopenharmony_ci ] 1646a23e08bSopenharmony_ci} 1656a23e08bSopenharmony_ci 1666a23e08bSopenharmony_cilet config = { 1676a23e08bSopenharmony_ci cache: { 1686a23e08bSopenharmony_ci type: 'filesystem' 1696a23e08bSopenharmony_ci }, 1706a23e08bSopenharmony_ci watch: watchMode, 1716a23e08bSopenharmony_ci watchOptions: { 1726a23e08bSopenharmony_ci aggregateTimeout: 10, 1736a23e08bSopenharmony_ci poll: false, 1746a23e08bSopenharmony_ci ignored: ["**/node_modules", "**/oh_modules", "**/*.json~"] 1756a23e08bSopenharmony_ci }, 1766a23e08bSopenharmony_ci optimization: { 1776a23e08bSopenharmony_ci moduleIds: 'deterministic', 1786a23e08bSopenharmony_ci chunkIds: 'deterministic', 1796a23e08bSopenharmony_ci }, 1806a23e08bSopenharmony_ci output: { 1816a23e08bSopenharmony_ci filename: '[name].js', 1826a23e08bSopenharmony_ci pathinfo: false, 1836a23e08bSopenharmony_ci devtoolModuleFilenameTemplate: (info) => { 1846a23e08bSopenharmony_ci const newInfo = info.absoluteResourcePath.replace(process.env.projectRootPath + path.sep, '') 1856a23e08bSopenharmony_ci .replace(process.env.projectRootPath + path.sep, '') 1866a23e08bSopenharmony_ci .replace(path.join(__dirname, path.sep), ''); 1876a23e08bSopenharmony_ci return newInfo; 1886a23e08bSopenharmony_ci }, 1896a23e08bSopenharmony_ci globalObject: 'globalThis' 1906a23e08bSopenharmony_ci }, 1916a23e08bSopenharmony_ci devtool: 'nosources-source-map', 1926a23e08bSopenharmony_ci mode: 'development', 1936a23e08bSopenharmony_ci module: richModule, 1946a23e08bSopenharmony_ci node: { 1956a23e08bSopenharmony_ci global: false 1966a23e08bSopenharmony_ci }, 1976a23e08bSopenharmony_ci stats: 'none' 1986a23e08bSopenharmony_ci} 1996a23e08bSopenharmony_ci 2006a23e08bSopenharmony_cifunction setConfigs(env) { 2016a23e08bSopenharmony_ci if (process.env.aceModuleJsonPath || env.aceModuleJsonPath) { 2026a23e08bSopenharmony_ci process.env.compileMode = 'moduleJson'; 2036a23e08bSopenharmony_ci } 2046a23e08bSopenharmony_ci process.env.error = env.error === undefined ? true : env.error 2056a23e08bSopenharmony_ci process.env.warning = env.warning === undefined ? true : env.warning 2066a23e08bSopenharmony_ci process.env.note = env.note === undefined ? true : env.note 2076a23e08bSopenharmony_ci process.env.buildMode = env.buildMode || 'debug' 2086a23e08bSopenharmony_ci process.env.logLevel = env.logLevel || '1' 2096a23e08bSopenharmony_ci process.env.isPreview = env.isPreview || false 2106a23e08bSopenharmony_ci process.env.projectPath = env.aceModuleRoot || process.env.aceModuleRoot || process.cwd(); 2116a23e08bSopenharmony_ci hashProjectPath(process.env.projectPath); 2126a23e08bSopenharmony_ci process.env.buildPath = env.aceModuleBuild || process.env.aceModuleBuild || 2136a23e08bSopenharmony_ci path.resolve(process.env.projectPath, 'build'); 2146a23e08bSopenharmony_ci process.env.cachePath = env.cachePath || process.env.cachePath || path.resolve(__dirname, 'node_modules/.cache'); 2156a23e08bSopenharmony_ci process.env.aceManifestPath = process.env.aceManifestPath || path.resolve(process.env.projectPath, 'manifest.json'); 2166a23e08bSopenharmony_ci process.env.abilityType = process.env.abilityType || 'page'; 2176a23e08bSopenharmony_ci process.env.DEVICE_LEVEL = env.DEVICE_LEVEL || process.env.DEVICE_LEVEL || 'rich'; 2186a23e08bSopenharmony_ci process.env.aceModuleJsonPath = env.aceModuleJsonPath || process.env.aceModuleJsonPath; 2196a23e08bSopenharmony_ci process.env.aceProfilePath = env.aceProfilePath || process.env.aceProfilePath; 2206a23e08bSopenharmony_ci process.env.watchCSSFiles = process.env.watchCSSFiles || path.resolve(process.env.cachePath, '.rich_cache', 'preview_css.json'); 2216a23e08bSopenharmony_ci watchMode = (process.env.watchMode && process.env.watchMode === 'true') || 2226a23e08bSopenharmony_ci (env.watchMode && env.watchMode === 'true') || false; 2236a23e08bSopenharmony_ci if (process.env.abilityType === 'page' || process.env.abilityType === 'form') { 2246a23e08bSopenharmony_ci const manifest = readManifest(process.env.aceManifestPath) 2256a23e08bSopenharmony_ci if (process.env.compileMode !== 'moduleJson') { 2266a23e08bSopenharmony_ci process.env.DEVICE_LEVEL = manifest.type === 'form' ? 'card' : 'rich' 2276a23e08bSopenharmony_ci } 2286a23e08bSopenharmony_ci process.env.PLATFORM_VERSION = PLATFORM.VERSION6; 2296a23e08bSopenharmony_ci const version = parseInt(manifest.minPlatformVersion); 2306a23e08bSopenharmony_ci if (version == 5) { 2316a23e08bSopenharmony_ci process.env.PLATFORM_VERSION = PLATFORM.VERSION5; 2326a23e08bSopenharmony_ci } 2336a23e08bSopenharmony_ci if (version <= 4) { 2346a23e08bSopenharmony_ci process.env.PLATFORM_VERSION = PLATFORM.VERSION3; 2356a23e08bSopenharmony_ci } 2366a23e08bSopenharmony_ci } 2376a23e08bSopenharmony_ci process.env.aceBuildJson = env.aceBuildJson || process.env.aceBuildJson; 2386a23e08bSopenharmony_ci checkMultiResourceBuild(process.env.aceBuildJson); 2396a23e08bSopenharmony_ci} 2406a23e08bSopenharmony_ci 2416a23e08bSopenharmony_cifunction setArkPlugin(env, workerFile) { 2426a23e08bSopenharmony_ci if (env.isPreview === "true" || env.compilerType && env.compilerType === 'ark') { 2436a23e08bSopenharmony_ci let arkDir = path.join(__dirname, 'bin', 'ark'); 2446a23e08bSopenharmony_ci if (env.arkFrontendDir) { 2456a23e08bSopenharmony_ci arkDir = env.arkFrontendDir; 2466a23e08bSopenharmony_ci } 2476a23e08bSopenharmony_ci let nodeJs = 'node'; 2486a23e08bSopenharmony_ci if (env.nodeJs) { 2496a23e08bSopenharmony_ci nodeJs = env.nodeJs; 2506a23e08bSopenharmony_ci } 2516a23e08bSopenharmony_ci config.plugins.push(new GenAbcPlugin(process.env.buildPath, arkDir, nodeJs, workerFile, 2526a23e08bSopenharmony_ci env.buildMode === 'debug')) 2536a23e08bSopenharmony_ci if (env.buildMode === 'release') { 2546a23e08bSopenharmony_ci config.output.path = path.join(process.env.cachePath, "releaseAssets", 2556a23e08bSopenharmony_ci path.basename(process.env.buildPath)); 2566a23e08bSopenharmony_ci process.env.configOutput = config.output.path; 2576a23e08bSopenharmony_ci } 2586a23e08bSopenharmony_ci } else { 2596a23e08bSopenharmony_ci if (env.deviceType) { 2606a23e08bSopenharmony_ci let deviceArr = env.deviceType.split(/,/) 2616a23e08bSopenharmony_ci let isDefault = deviceArr.indexOf('tv') >= 0 || deviceArr.indexOf('wearable') >= 0 ? true : false 2626a23e08bSopenharmony_ci if (isDefault) { 2636a23e08bSopenharmony_ci config.plugins.push(new GenBinPlugin(process.env.buildPath, path.join(__dirname, 'bin', workerFile))) 2646a23e08bSopenharmony_ci } 2656a23e08bSopenharmony_ci } 2666a23e08bSopenharmony_ci } 2676a23e08bSopenharmony_ci} 2686a23e08bSopenharmony_ci 2696a23e08bSopenharmony_cifunction existsPackageJson(config, rootPackageJsonPath, modulePackageJsonPath) { 2706a23e08bSopenharmony_ci if (config.cache) { 2716a23e08bSopenharmony_ci config.cache.buildDependencies = { 2726a23e08bSopenharmony_ci config: [] 2736a23e08bSopenharmony_ci }; 2746a23e08bSopenharmony_ci if (fs.existsSync(rootPackageJsonPath)) { 2756a23e08bSopenharmony_ci config.cache.buildDependencies.config.push(rootPackageJsonPath); 2766a23e08bSopenharmony_ci } 2776a23e08bSopenharmony_ci if (fs.existsSync(modulePackageJsonPath)) { 2786a23e08bSopenharmony_ci config.cache.buildDependencies.config.push(modulePackageJsonPath); 2796a23e08bSopenharmony_ci } 2806a23e08bSopenharmony_ci } 2816a23e08bSopenharmony_ci} 2826a23e08bSopenharmony_ci 2836a23e08bSopenharmony_cifunction excludeWorker(workerFile, name) { 2846a23e08bSopenharmony_ci if (workerFile) { 2856a23e08bSopenharmony_ci return Object.keys(workerFile).includes(name); 2866a23e08bSopenharmony_ci } 2876a23e08bSopenharmony_ci return /^\.\/workers\//.test(name); 2886a23e08bSopenharmony_ci} 2896a23e08bSopenharmony_ci 2906a23e08bSopenharmony_cimodule.exports = (env) => { 2916a23e08bSopenharmony_ci setConfigs(env); 2926a23e08bSopenharmony_ci compareCache(path.resolve(process.env.cachePath, '.rich_cache')); 2936a23e08bSopenharmony_ci const workerFile = readWorkerFile(); 2946a23e08bSopenharmony_ci if (process.env.compileMode === 'moduleJson') { 2956a23e08bSopenharmony_ci process.env.DEVICE_LEVEL = 'card'; 2966a23e08bSopenharmony_ci config.entry = {}; 2976a23e08bSopenharmony_ci } else { 2986a23e08bSopenharmony_ci deleteFolderRecursive(process.env.buildPath); 2996a23e08bSopenharmony_ci config.entry = loadEntryObj(process.env.projectPath, process.env.DEVICE_LEVEL, 3006a23e08bSopenharmony_ci process.env.abilityType, process.env.aceManifestPath); 3016a23e08bSopenharmony_ci existsPackageJson(config, path.resolve(process.env.projectPath, '../../../../../package.json'), 3026a23e08bSopenharmony_ci path.resolve(process.env.projectPath, '../../../../package.json')); 3036a23e08bSopenharmony_ci } 3046a23e08bSopenharmony_ci config.cache.cacheDirectory = path.resolve(process.env.cachePath, '.rich_cache', 3056a23e08bSopenharmony_ci path.basename(process.env.projectPath)); 3066a23e08bSopenharmony_ci config.output.path = path.resolve(__dirname, process.env.buildPath) 3076a23e08bSopenharmony_ci config.plugins = [ 3086a23e08bSopenharmony_ci new ResourcePlugin(process.env.projectPath, process.env.buildPath, 3096a23e08bSopenharmony_ci process.env.aceManifestPath, process.env.watchCSSFiles, workerFile), 3106a23e08bSopenharmony_ci new ResultStates({ 3116a23e08bSopenharmony_ci build: process.env.buildPath 3126a23e08bSopenharmony_ci }), 3136a23e08bSopenharmony_ci new webpack.DefinePlugin({ 3146a23e08bSopenharmony_ci STANDARD: JSON.stringify(true), 3156a23e08bSopenharmony_ci LITE: JSON.stringify(false) 3166a23e08bSopenharmony_ci }) 3176a23e08bSopenharmony_ci ] 3186a23e08bSopenharmony_ci config.resolve = { 3196a23e08bSopenharmony_ci modules: [ 3206a23e08bSopenharmony_ci process.env.projectPath, 3216a23e08bSopenharmony_ci path.join(process.env.projectPath, '../../../../../'), 3226a23e08bSopenharmony_ci path.join(__dirname, 'node_modules'), 3236a23e08bSopenharmony_ci './node_modules', 3246a23e08bSopenharmony_ci './oh_modules' 3256a23e08bSopenharmony_ci ], 3266a23e08bSopenharmony_ci descriptionFiles: ['package.json', 'oh-package.json5'], 3276a23e08bSopenharmony_ci plugins: [new ReadJsonPlugin()], 3286a23e08bSopenharmony_ci } 3296a23e08bSopenharmony_ci if (fs.existsSync(path.resolve(process.env.projectPath, 'i18n'))) { 3306a23e08bSopenharmony_ci config.plugins.push(new CopyPlugin({ 3316a23e08bSopenharmony_ci patterns: [ 3326a23e08bSopenharmony_ci { 3336a23e08bSopenharmony_ci from: path.resolve(process.env.projectPath, 'i18n'), 3346a23e08bSopenharmony_ci to: path.resolve(process.env.buildPath, 'i18n'), 3356a23e08bSopenharmony_ci noErrorOnMissing: true 3366a23e08bSopenharmony_ci } 3376a23e08bSopenharmony_ci ] 3386a23e08bSopenharmony_ci })) 3396a23e08bSopenharmony_ci } 3406a23e08bSopenharmony_ci if (process.env.aceConfigPath && fs.existsSync(process.env.aceConfigPath)) { 3416a23e08bSopenharmony_ci config.plugins.push(new CopyPlugin({ 3426a23e08bSopenharmony_ci patterns: [ 3436a23e08bSopenharmony_ci { 3446a23e08bSopenharmony_ci from: path.resolve(process.env.aceConfigPath), 3456a23e08bSopenharmony_ci to: path.resolve(process.env.buildPath, 'config.json'), 3466a23e08bSopenharmony_ci noErrorOnMissing: true 3476a23e08bSopenharmony_ci } 3486a23e08bSopenharmony_ci ] 3496a23e08bSopenharmony_ci })) 3506a23e08bSopenharmony_ci } 3516a23e08bSopenharmony_ci if (process.env.DEVICE_LEVEL === 'card') { 3526a23e08bSopenharmony_ci config.module = cardModule 3536a23e08bSopenharmony_ci config.plugins.push(new AfterEmitPlugin()) 3546a23e08bSopenharmony_ci config.optimization = {}; 3556a23e08bSopenharmony_ci setArkPlugin(env, workerFile); 3566a23e08bSopenharmony_ci } else { 3576a23e08bSopenharmony_ci if (process.env.compileMode !== 'moduleJson' && process.env.abilityType === 'page') { 3586a23e08bSopenharmony_ci Object.assign(config.optimization, { 3596a23e08bSopenharmony_ci splitChunks: { 3606a23e08bSopenharmony_ci chunks(chunk) { 3616a23e08bSopenharmony_ci return !excludeWorker(workerFile, chunk.name) && !/^\.\/TestAbility/.test(chunk.name); 3626a23e08bSopenharmony_ci }, 3636a23e08bSopenharmony_ci minSize: 0, 3646a23e08bSopenharmony_ci cacheGroups: { 3656a23e08bSopenharmony_ci vendors: { 3666a23e08bSopenharmony_ci test: /[\\/](node|oh)_modules[\\/]/, 3676a23e08bSopenharmony_ci priority: 20, 3686a23e08bSopenharmony_ci name: "vendors", 3696a23e08bSopenharmony_ci }, 3706a23e08bSopenharmony_ci commons: { 3716a23e08bSopenharmony_ci test: /\.js|css|hml$/, 3726a23e08bSopenharmony_ci name: 'commons', 3736a23e08bSopenharmony_ci priority: 10, 3746a23e08bSopenharmony_ci minChunks: 2, 3756a23e08bSopenharmony_ci } 3766a23e08bSopenharmony_ci } 3776a23e08bSopenharmony_ci }, 3786a23e08bSopenharmony_ci }); 3796a23e08bSopenharmony_ci } 3806a23e08bSopenharmony_ci setArkPlugin(env, workerFile); 3816a23e08bSopenharmony_ci if (env.sourceMap === 'none') { 3826a23e08bSopenharmony_ci config.devtool = false 3836a23e08bSopenharmony_ci } 3846a23e08bSopenharmony_ci if (env.buildMode === 'release') { 3856a23e08bSopenharmony_ci config.mode = 'production'; 3866a23e08bSopenharmony_ci Object.assign(config.optimization, { 3876a23e08bSopenharmony_ci minimize: true, 3886a23e08bSopenharmony_ci minimizer: [new TerserPlugin({ 3896a23e08bSopenharmony_ci terserOptions: { 3906a23e08bSopenharmony_ci compress: { 3916a23e08bSopenharmony_ci defaults: false, 3926a23e08bSopenharmony_ci dead_code: true, 3936a23e08bSopenharmony_ci collapse_vars: true, 3946a23e08bSopenharmony_ci unused: true, 3956a23e08bSopenharmony_ci drop_debugger: true, 3966a23e08bSopenharmony_ci if_return: true, 3976a23e08bSopenharmony_ci reduce_vars: true, 3986a23e08bSopenharmony_ci join_vars: false, 3996a23e08bSopenharmony_ci sequences: 0, 4006a23e08bSopenharmony_ci }, 4016a23e08bSopenharmony_ci format: { 4026a23e08bSopenharmony_ci semicolons: false, 4036a23e08bSopenharmony_ci beautify: true, 4046a23e08bSopenharmony_ci braces: true, 4056a23e08bSopenharmony_ci indent_level: 2, 4066a23e08bSopenharmony_ci }, 4076a23e08bSopenharmony_ci }, 4086a23e08bSopenharmony_ci })], 4096a23e08bSopenharmony_ci }); 4106a23e08bSopenharmony_ci config.output.devtoolModuleFilenameTemplate = (info) => { 4116a23e08bSopenharmony_ci const newInfo = info.absoluteResourcePath.replace(process.env.projectRootPath + path.sep, '') 4126a23e08bSopenharmony_ci .replace(process.env.projectRootPath + path.sep, '') 4136a23e08bSopenharmony_ci .replace(path.join(__dirname, path.sep), ''); 4146a23e08bSopenharmony_ci return newInfo; 4156a23e08bSopenharmony_ci } 4166a23e08bSopenharmony_ci config.output.sourceMapFilename = '_releaseMap/[name].js.map' 4176a23e08bSopenharmony_ci } 4186a23e08bSopenharmony_ci } 4196a23e08bSopenharmony_ci if (process.env.abilityType === 'testrunner') { 4206a23e08bSopenharmony_ci config.module.rules = []; 4216a23e08bSopenharmony_ci config.module.rules.unshift({ 4226a23e08bSopenharmony_ci test: /TestRunner/, 4236a23e08bSopenharmony_ci use: [{ 4246a23e08bSopenharmony_ci loader: path.resolve(__dirname, './index.js') 4256a23e08bSopenharmony_ci }] 4266a23e08bSopenharmony_ci }) 4276a23e08bSopenharmony_ci } else { 4286a23e08bSopenharmony_ci config.module.rules.unshift({ 4296a23e08bSopenharmony_ci test: parseAbilityName(process.env.abilityType, process.env.projectPath), 4306a23e08bSopenharmony_ci use: [{ 4316a23e08bSopenharmony_ci loader: path.resolve(__dirname, './index.js') 4326a23e08bSopenharmony_ci }] 4336a23e08bSopenharmony_ci }) 4346a23e08bSopenharmony_ci } 4356a23e08bSopenharmony_ci 4366a23e08bSopenharmony_ci config.output.library = process.env.hashProjectPath; 4376a23e08bSopenharmony_ci return config 4386a23e08bSopenharmony_ci} 439