UNPKG

@hap-toolkit/packager

Version:

@hap-toolkit/packager

3 lines (2 loc) 5.06 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SplitChunksAdaptPlugin=void 0;var _path=_interopRequireDefault(require("path")),_Compilation=_interopRequireDefault(require("webpack/lib/Compilation")),_info=require("../common/info"),_sharedUtils=require("@hap-toolkit/shared-utils"),_compiler=require("@hap-toolkit/compiler");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let ConcatSource;const SEP=_path.default.sep,SPLIT_CHUNKS_PAGE_NAME=_sharedUtils.compileOptionsMeta.splitChunksNameEnum.PAGE,SPLIT_CHUNKS_APP_NAME=_sharedUtils.compileOptionsMeta.splitChunksNameEnum.APP,MAIN_PKG_NAME=_sharedUtils.compileOptionsMeta.MAIN_PKG_NAME,pluginName="splitChunksAdaptPlugin",actualModuleRequireParam=["module.exports","module","module.exports","__webpack_require__"],moduleRequireNativeFunctions=["$app_define$","$app_bootstrap$","$app_require$","$app_define_wrap$"],appModuleRequireNativeFunctions=["$app_define$","$app_bootstrap$","$app_require$","$app_define_wrap$"],actualParamStr=actualModuleRequireParam.concat(moduleRequireNativeFunctions).join(", "),formalParamStr=moduleRequireNativeFunctions.join(", "),quickappGlobal="var __quickappGlobal = Object.getPrototypeOf(global) || global;";function replaceWindowWithGlobalStr(e,a){let t=e?"global":"__quickappGlobal";return a.replace(/window(?=\["webpackChunk\w+"\])/g,t)}function createChunksJsonInfo(e){let a={[SPLIT_CHUNKS_APP_NAME]:{jsonFilePath:SPLIT_CHUNKS_APP_NAME,chunks:{}},[SPLIT_CHUNKS_PAGE_NAME]:{jsonFilePath:SPLIT_CHUNKS_PAGE_NAME,chunks:{}}};return e&&(a[MAIN_PKG_NAME]={resource:MAIN_PKG_NAME,jsonFilePath:MAIN_PKG_NAME+SEP+SPLIT_CHUNKS_PAGE_NAME,chunks:{}},a=e.reduce(((e,a)=>(e[a.resource]={resource:a.resource,jsonFilePath:a.resource+SEP+SPLIT_CHUNKS_PAGE_NAME,standalone:a.standalone,chunks:{}},e)),a)),a}class SplitChunksAdaptPlugin{constructor(e){this.options=e}apply(e){e.hooks.compilation.tap(pluginName,(a=>{ConcatSource=e.webpack.sources.ConcatSource;const t=this.options;let o;!t.disableSubpackages&&t.subpackages&&t.subpackages.length>0&&(o=t.subpackages);const s=new Set;let n=[],r="";a.hooks.optimizeChunkIds.tap(pluginName,(t=>{n=(0,_info.getEntryFiles)(e.options.entry);const o=Array.from(t).filter((e=>-1===n.indexOf(`${e.name}.js`))).map((e=>`"${e.id}": "${e.name}.js"`));r=`__quickappGlobal.chunkFileMap = __quickappGlobal.chunkFileMap || {${o.join(", ")}};`,t.forEach((e=>{const t=Array.from(a.chunkGraph.getChunkEntryModulesIterable(e))[0];e.name.match(/\bapp$/)&&t&&(e.groupsIterable.forEach((e=>{e.chunks.forEach((e=>{s.add(`${e.name}.js`)}))})),s.delete("app.js"))}))})),a.hooks.processAssets.tap({name:pluginName,stage:_Compilation.default.PROCESS_ASSETS_STAGE_OPTIMIZE},(()=>{a.chunks.forEach((e=>{e.files.forEach((t=>{if(!t.match(/\.js$/))return;let o=actualParamStr,s=formalParamStr,n=!1;t.match(/\bapp\.js$/)&&(o=actualModuleRequireParam.concat(appModuleRequireNativeFunctions).join(", "),s=appModuleRequireNativeFunctions.join(", "));let u=a.assets[t].source();Array.from(a.chunkGraph.getChunkEntryModulesIterable(e))[0]?u=u.replace(/\/\/\s+webpackBootstrap/,(e=>`${e}\n\n\t\t\t\t\t${quickappGlobal}\n\t\t\t\t\t${r}\n`)):n=!0,u=replaceWindowWithGlobalStr(n,u),u=u.replace(/fulfilled\s+=\s+false;/,"fulfilled = false; $app_evaluate$(`${__quickappGlobal.chunkFileMap[chunkIds[j]]}`);"),u=u.replace(/__webpack_require__\.l\(url, loadingEnded,.+\)/g,"$app_evaluate$(`${__quickappGlobal.chunkFileMap[chunkId]}`);loadingEnded();"),u=u.replace(/(__webpack_modules__\[moduleId\])\(\s*module,\s*module\.exports,\s*__webpack_require__/gm,`$1.call(${o}`),u=u.replace(/(\(\(__unused_webpack_module,\s+(exports|__webpack_exports__|__unused_webpack_exports)(,\s+__webpack_require__)?)/g,(e=>e.includes("__webpack_require__")?e+`, ${s}`:e+`, __webpack_require__, ${s}`)),u=u.replace(/var\s*script\s*=\s*document\.createElement\('script'\);([\s|\S])+?document\.head\.appendChild\(script\);/,"$app_evaluate$(`${__quickappGlobal.chunkFileMap[chunkId]}`);\n/******/\t\t\t\treturn Promise.all(promises);"),a.assets[t]=new ConcatSource(u)}))}))})),a.hooks.processAssets.tap({name:pluginName,stage:_Compilation.default.PROCESS_ASSETS_STAGE_DEV_TOOLING},(()=>{const e=createChunksJsonInfo(o);a.chunks.forEach((t=>{t.files.forEach((r=>{if(r.match(/\.js$/)&&-1===n.indexOf(r)){const n=a.assets[r].source();s.has(r)?e[SPLIT_CHUNKS_APP_NAME].chunks[r]=n:(e[SPLIT_CHUNKS_PAGE_NAME].chunks[r]=n,o&&a.chunkGroups.forEach((a=>{if(-1!==a.chunks.map((e=>e.name+".js")).indexOf(r)){const t=a.options.name||"",{resource:o,standalone:s}=(a=>{const t=Object.keys(e).find((e=>a.replace(/\\/g,"/").startsWith((e+SEP).replace(/\\/g,"/"))));return t?e[t]:e[MAIN_PKG_NAME]})(t);s?e[o].chunks=e[SPLIT_CHUNKS_PAGE_NAME].chunks:e[o].chunks[r]=n}}))),delete a.assets[r],t.files=[]}}))}));for(const t in e){const o=e[t].chunks;if(!(0,_compiler.isEmptyObject)(o)){const s=e[t].jsonFilePath;a.assets[s]=new ConcatSource(JSON.stringify(o))}}}))}))}}exports.SplitChunksAdaptPlugin=SplitChunksAdaptPlugin; //# sourceMappingURL=splitchunks-adapt-plugin.js.map