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_ciconst path = require('path'); 176a23e08bSopenharmony_ciconst fs = require('fs'); 186a23e08bSopenharmony_ciconst webpack = require('webpack'); 196a23e08bSopenharmony_ciconst TerserPlugin = require('terser-webpack-plugin'); 206a23e08bSopenharmony_ciconst SnapshotPlugin = require('./lib/lite/lite-snapshot-plugin'); 216a23e08bSopenharmony_ciconst ImageCoverterPlugin = require('./lib/lite/lite-image-coverter-plugin'); 226a23e08bSopenharmony_ciconst ReturnExportsPlugin = require('./lib/lite/lite-return-exports-plugin'); 236a23e08bSopenharmony_ciconst ResourcePlugin = require('./lib/resource-plugin'); 246a23e08bSopenharmony_ciconst ResultStates = require('./lib/compile-plugin'); 256a23e08bSopenharmony_ciconst { checkFilePath } = require('./lib/lite/lite-customize'); 266a23e08bSopenharmony_ciconst CopyPlugin = require("copy-webpack-plugin"); 276a23e08bSopenharmony_ci 286a23e08bSopenharmony_ciprocess.env.DEVICE_LEVEL = 'lite'; 296a23e08bSopenharmony_ciprocess.env.DEVICE_TYPE = 'smartVision'; 306a23e08bSopenharmony_ci 316a23e08bSopenharmony_ciconst watchMode = (process.env.watchMode && process.env.watchMode === 'true') || false; 326a23e08bSopenharmony_ciconst pictrueSwitch = process.env.img2bin !== 'false'; 336a23e08bSopenharmony_ciconst util = require('./lib/util'); 346a23e08bSopenharmony_ciconst { PLATFORM }= require('./lib/lite/lite-enum'); 356a23e08bSopenharmony_ciconst { deleteFolderRecursive, readManifest, loadEntryObj, checkMultiResourceBuild } = require('./main.product'); 366a23e08bSopenharmony_ci 376a23e08bSopenharmony_ciconst webpackConfig = { 386a23e08bSopenharmony_ci target: ['web', 'es5'], 396a23e08bSopenharmony_ci cache: { 406a23e08bSopenharmony_ci type: 'filesystem' 416a23e08bSopenharmony_ci }, 426a23e08bSopenharmony_ci watch: watchMode, 436a23e08bSopenharmony_ci watchOptions: { 446a23e08bSopenharmony_ci aggregateTimeout: 10, 456a23e08bSopenharmony_ci poll: false, 466a23e08bSopenharmony_ci ignored: /node_modules/, 476a23e08bSopenharmony_ci }, 486a23e08bSopenharmony_ci optimization: { 496a23e08bSopenharmony_ci moduleIds: 'deterministic', 506a23e08bSopenharmony_ci chunkIds: 'deterministic', 516a23e08bSopenharmony_ci }, 526a23e08bSopenharmony_ci output: { 536a23e08bSopenharmony_ci filename: '[name].js', 546a23e08bSopenharmony_ci pathinfo: false, 556a23e08bSopenharmony_ci devtoolModuleFilenameTemplate: (info) => { 566a23e08bSopenharmony_ci return `${info.absoluteResourcePath.replace(process.env.projectRootPath + path.sep, '')}`; 576a23e08bSopenharmony_ci }, 586a23e08bSopenharmony_ci }, 596a23e08bSopenharmony_ci devtool: 'nosources-source-map', 606a23e08bSopenharmony_ci mode: 'development', 616a23e08bSopenharmony_ci module: { 626a23e08bSopenharmony_ci rules: [ 636a23e08bSopenharmony_ci { 646a23e08bSopenharmony_ci test: /(\.hml|app\.js)(\?[^?]+)?$/, 656a23e08bSopenharmony_ci use: [{ 666a23e08bSopenharmony_ci loader: path.resolve(__dirname, './index.js') 676a23e08bSopenharmony_ci }] 686a23e08bSopenharmony_ci }, 696a23e08bSopenharmony_ci { 706a23e08bSopenharmony_ci test: /\.png$/, 716a23e08bSopenharmony_ci use: [{ 726a23e08bSopenharmony_ci loader: 'file-loader', 736a23e08bSopenharmony_ci options: { 746a23e08bSopenharmony_ci name: '[name].[ext]', outputPath: 'common' 756a23e08bSopenharmony_ci } 766a23e08bSopenharmony_ci }] 776a23e08bSopenharmony_ci }, 786a23e08bSopenharmony_ci { 796a23e08bSopenharmony_ci test: /\.css$/, 806a23e08bSopenharmony_ci use: [{ 816a23e08bSopenharmony_ci loader: 'css-loader' 826a23e08bSopenharmony_ci }] 836a23e08bSopenharmony_ci }, 846a23e08bSopenharmony_ci { 856a23e08bSopenharmony_ci test: /\.less$/, 866a23e08bSopenharmony_ci use: [{ 876a23e08bSopenharmony_ci loader: 'less-loader' 886a23e08bSopenharmony_ci }] 896a23e08bSopenharmony_ci }, 906a23e08bSopenharmony_ci { 916a23e08bSopenharmony_ci test: /\.(scss|sass)$/, 926a23e08bSopenharmony_ci use: [{ 936a23e08bSopenharmony_ci loader: 'style-loader!css-loader!sass-loader' 946a23e08bSopenharmony_ci }] 956a23e08bSopenharmony_ci }, 966a23e08bSopenharmony_ci { 976a23e08bSopenharmony_ci test: /\.jsx?$/, 986a23e08bSopenharmony_ci use: [ 996a23e08bSopenharmony_ci { 1006a23e08bSopenharmony_ci loader: path.resolve(__dirname, 'lib/module-script.js'), 1016a23e08bSopenharmony_ci }, 1026a23e08bSopenharmony_ci { 1036a23e08bSopenharmony_ci loader: util.loadBabelModule('babel-loader'), 1046a23e08bSopenharmony_ci options: { 1056a23e08bSopenharmony_ci presets: [util.loadBabelModule('@babel/preset-env')], 1066a23e08bSopenharmony_ci plugins: [util.loadBabelModule('@babel/plugin-transform-modules-commonjs'), 1076a23e08bSopenharmony_ci util.loadBabelModule('@babel/plugin-proposal-class-properties')], 1086a23e08bSopenharmony_ci }, 1096a23e08bSopenharmony_ci }, 1106a23e08bSopenharmony_ci ] 1116a23e08bSopenharmony_ci } 1126a23e08bSopenharmony_ci ] 1136a23e08bSopenharmony_ci }, 1146a23e08bSopenharmony_ci node: { 1156a23e08bSopenharmony_ci global: false, 1166a23e08bSopenharmony_ci }, 1176a23e08bSopenharmony_ci stats: 'none', 1186a23e08bSopenharmony_ci}; 1196a23e08bSopenharmony_ci 1206a23e08bSopenharmony_cifunction setConfigs(env) { 1216a23e08bSopenharmony_ci process.env.error = env.error === undefined ? true : env.error 1226a23e08bSopenharmony_ci process.env.warning = env.warning === undefined ? true : env.warning 1236a23e08bSopenharmony_ci process.env.note = env.note === undefined ? true : env.note 1246a23e08bSopenharmony_ci process.env.buildMode = env.buildMode || 'debug' 1256a23e08bSopenharmony_ci process.env.logLevel = env.logLevel || '1' 1266a23e08bSopenharmony_ci process.env.projectPath = env.aceModuleRoot || process.env.aceModuleRoot || process.cwd(); 1276a23e08bSopenharmony_ci process.env.buildPath = env.aceModuleBuild || process.env.aceModuleBuild || path.resolve(process.env.projectPath, 'build'); 1286a23e08bSopenharmony_ci process.env.cachePath = env.cachePath || process.env.cachePath || path.resolve(__dirname, 'node_modules/.cache'); 1296a23e08bSopenharmony_ci process.env.aceManifestPath = process.env.aceManifestPath || path.resolve(process.env.projectPath, 'manifest.json'); 1306a23e08bSopenharmony_ci process.env.watchCSSFiles = process.env.watchCSSFiles || path.resolve(process.env.cachePath, '.lite_cache', 'preview_css.json'); 1316a23e08bSopenharmony_ci process.env.abilityType = 'page'; 1326a23e08bSopenharmony_ci const manifest = readManifest(process.env.aceManifestPath) 1336a23e08bSopenharmony_ci process.env.PLATFORM_VERSION = PLATFORM.VERSION6; 1346a23e08bSopenharmony_ci const version = parseInt(manifest.minPlatformVersion); 1356a23e08bSopenharmony_ci if (version == 5) { 1366a23e08bSopenharmony_ci process.env.PLATFORM_VERSION = PLATFORM.VERSION5; 1376a23e08bSopenharmony_ci } 1386a23e08bSopenharmony_ci if (version <= 4) { 1396a23e08bSopenharmony_ci process.env.PLATFORM_VERSION = PLATFORM.VERSION3; 1406a23e08bSopenharmony_ci } 1416a23e08bSopenharmony_ci process.env.PLATFORM_VERSION_VERSION = version; 1426a23e08bSopenharmony_ci process.env.aceBuildJson = env.aceBuildJson || process.env.aceBuildJson; 1436a23e08bSopenharmony_ci checkMultiResourceBuild(process.env.aceBuildJson); 1446a23e08bSopenharmony_ci} 1456a23e08bSopenharmony_ci 1466a23e08bSopenharmony_cimodule.exports = (env) => { 1476a23e08bSopenharmony_ci setConfigs(env) 1486a23e08bSopenharmony_ci deleteFolderRecursive(process.env.buildPath); 1496a23e08bSopenharmony_ci webpackConfig.cache.cacheDirectory = path.resolve(process.env.cachePath, '.lite_cache'); 1506a23e08bSopenharmony_ci webpackConfig.entry = loadEntryObj(process.env.projectPath, process.env.DEVICE_LEVEL, 1516a23e08bSopenharmony_ci process.env.abilityType, process.env.aceManifestPath) 1526a23e08bSopenharmony_ci webpackConfig.output.path = path.resolve(__dirname, process.env.buildPath) 1536a23e08bSopenharmony_ci webpackConfig.plugins = [ 1546a23e08bSopenharmony_ci new ResourcePlugin(process.env.projectPath, process.env.buildPath, 1556a23e08bSopenharmony_ci process.env.aceManifestPath, process.env.watchCSSFiles), 1566a23e08bSopenharmony_ci new ResultStates({ 1576a23e08bSopenharmony_ci build: process.env.buildPath 1586a23e08bSopenharmony_ci }), 1596a23e08bSopenharmony_ci new ReturnExportsPlugin(), 1606a23e08bSopenharmony_ci new webpack.DefinePlugin({ 1616a23e08bSopenharmony_ci STANDARD: JSON.stringify(false), 1626a23e08bSopenharmony_ci LITE: JSON.stringify(true) 1636a23e08bSopenharmony_ci }) 1646a23e08bSopenharmony_ci ] 1656a23e08bSopenharmony_ci webpackConfig.resolve = { 1666a23e08bSopenharmony_ci modules: [ 1676a23e08bSopenharmony_ci process.env.projectPath, 1686a23e08bSopenharmony_ci path.join(process.env.projectPath, '../../../../../'), 1696a23e08bSopenharmony_ci path.join(__dirname, 'node_modules'), 1706a23e08bSopenharmony_ci './node_modules', 1716a23e08bSopenharmony_ci './oh_modules' 1726a23e08bSopenharmony_ci ] 1736a23e08bSopenharmony_ci } 1746a23e08bSopenharmony_ci if (fs.existsSync(path.resolve(process.env.projectPath, 'i18n'))) { 1756a23e08bSopenharmony_ci webpackConfig.plugins.push(new CopyPlugin({ 1766a23e08bSopenharmony_ci patterns: [ 1776a23e08bSopenharmony_ci { 1786a23e08bSopenharmony_ci from: path.resolve(process.env.projectPath, 'i18n'), 1796a23e08bSopenharmony_ci to: path.resolve(process.env.buildPath, 'i18n'), 1806a23e08bSopenharmony_ci noErrorOnMissing: true 1816a23e08bSopenharmony_ci } 1826a23e08bSopenharmony_ci ] 1836a23e08bSopenharmony_ci })) 1846a23e08bSopenharmony_ci } 1856a23e08bSopenharmony_ci 1866a23e08bSopenharmony_ci if (process.env.hapMode && process.env.hapMode === 'true') { 1876a23e08bSopenharmony_ci webpackConfig.optimization = { 1886a23e08bSopenharmony_ci minimize: true, 1896a23e08bSopenharmony_ci minimizer: [new TerserPlugin({ 1906a23e08bSopenharmony_ci terserOptions: { 1916a23e08bSopenharmony_ci compress: false, 1926a23e08bSopenharmony_ci mangle: true, 1936a23e08bSopenharmony_ci }, 1946a23e08bSopenharmony_ci }, 1956a23e08bSopenharmony_ci )], 1966a23e08bSopenharmony_ci }; 1976a23e08bSopenharmony_ci } 1986a23e08bSopenharmony_ci 1996a23e08bSopenharmony_ci if (pictrueSwitch) { 2006a23e08bSopenharmony_ci webpackConfig.plugins.push( 2016a23e08bSopenharmony_ci new ImageCoverterPlugin({ build: process.env.buildPath }), 2026a23e08bSopenharmony_ci ); 2036a23e08bSopenharmony_ci } 2046a23e08bSopenharmony_ci 2056a23e08bSopenharmony_ci if (env.deviceType) { 2066a23e08bSopenharmony_ci const deviceArr = env.deviceType.split(/,/); 2076a23e08bSopenharmony_ci if (deviceArr.includes('liteWearable')) { 2086a23e08bSopenharmony_ci process.env.DEVICE_TYPE = 'liteWearable'; 2096a23e08bSopenharmony_ci } 2106a23e08bSopenharmony_ci } 2116a23e08bSopenharmony_ci 2126a23e08bSopenharmony_ci if (env.sourceMap === 'none') { 2136a23e08bSopenharmony_ci webpackConfig.devtool = false 2146a23e08bSopenharmony_ci } 2156a23e08bSopenharmony_ci if (env.buildMode === 'release') { 2166a23e08bSopenharmony_ci webpackConfig.devtool = 'source-map' 2176a23e08bSopenharmony_ci webpackConfig.mode = 'production'; 2186a23e08bSopenharmony_ci webpackConfig.plugins.push( 2196a23e08bSopenharmony_ci new SnapshotPlugin({ build: process.env.buildPath }) 2206a23e08bSopenharmony_ci ); 2216a23e08bSopenharmony_ci webpackConfig.output.sourceMapFilename = '_releaseMap/[name].js.map' 2226a23e08bSopenharmony_ci } 2236a23e08bSopenharmony_ci checkFilePath(); 2246a23e08bSopenharmony_ci return webpackConfig; 2256a23e08bSopenharmony_ci}; 226