"use strict";const fs=require("fs"),path=require("path"),globalConfig=require("@hap-toolkit/shared-utils/config"),{initOptions:initOptions,options:compileOptions,optionsConfig:optionsConfig}=require("@hap-toolkit/shared-utils/compilation-config"),CopyDslPlugin=require("./plugin/copy-dsl-plugin"),HandlerPlugin=require("./plugin/handler-plugin"),ResourcePlugin=require("./plugin/resource-plugin"),ZipPlugin=require("./plugin/zip-plugin"),NotifyPlugin=require("./plugin/notify-plugin"),SourcemapFixPlugin=require("./plugin/sourcemap-fix-plugin"),SplitChunksAdaptPlugin=require("./plugin/splitchunks-adapt-plugin"),{colorconsole:colorconsole,loadBabelModule:loadBabelModule}=require("./common/utils");function genPriorities(e){const o=[/^i18n\/.+\.json$/i,"manifest.json","app.js",/^common\//i];if(e&&e.router&&e.router.entry){const n=e.router.entry;o.splice(3,0,new RegExp(`^${n}/$`),new RegExp(`^${n}/.+`))}else colorconsole.error("manifest.json 中未配置入口页面 router.entry");return o}function getManifest(e){let o;try{const n=fs.readFileSync(e).toString();o=JSON.parse(n)}catch(e){colorconsole.error(`读取 manifest.json 失败: ${e.message}`)}return o||{}}function resolveLoader(e){return require.resolve(`./loader/${e}`)}function postHook(e,o,n){const i=globalConfig.projectPath,{appPackageName:s,appIcon:r,versionCode:t,pathDist:l,pathBuild:u,pathSignFolder:a,pathSrc:p,subpackages:c,workers:g}=o;initOptions(n);const d=getManifest(path.join(p,"manifest.json")),m=genPriorities(d),f=[resolveLoader("module-loader.js"),{loader:loadBabelModule("babel-loader"),options:{cwd:i,cacheDirectory:!0}}];compileOptions.enableIstanbul&&f.unshift({loader:"istanbul-instrumenter-loader"}),e.module.rules.push({test:/\.js$/,use:f});const h="dev"===process.env.NODE_PHASE&&n.sign,b="dev"!==process.env.NODE_PHASE&&!n.debug,P=h||b,k=P?"release":"debug",S=JSON.stringify({toolkit:require("../package.json").version,timeStamp:(new Date).toJSON(),node:process.version,platform:process.platform,arch:process.arch,extends:n.packageExtends||null});if(n.includeDslFromLib&&e.plugins.unshift(new CopyDslPlugin({cwd:i,config:d.config})),n.splitChunksMode===optionsConfig.splitChunksModeEnum.SMART&&e.plugins.push(new SplitChunksAdaptPlugin({})),e.plugins.push(new HandlerPlugin({pathSrc:p,workers:g,enableE2e:n.enableE2e}),new ResourcePlugin({src:p,dest:u,sign:P,projectRoot:globalConfig.projectPath,optimizeUnusedResource:n.optimizeUnusedResource}),new ZipPlugin({name:s,icon:r,versionCode:t,output:l,pathBuild:u,pathSignFolder:a,sign:k,priorities:m,subpackages:c,comment:S,cwd:i,disableStreamPack:n.disableStreamPack,disableSubpackages:n.disableSubpackages}),new NotifyPlugin),n.matchSourcemap&&e.plugins.push(new SourcemapFixPlugin),compileOptions.stats){const o=require("webpack-bundle-analyzer").BundleAnalyzerPlugin;e.plugins.push(new o({analyzerMode:"static",openAnalyzer:!1,excludeAssets:/^@(system|service)\./}))}}module.exports={postHook:postHook};
|