UNPKG

@aiot-toolkit/packager

Version:

@aiot-toolkit/packager

3 lines (2 loc) 5.64 kB
"use strict";var _path=_interopRequireDefault(require("path")),_Compilation=_interopRequireDefault(require("webpack/lib/Compilation")),_webpackSources=require("webpack-sources"),_info=require("../common/info"),_compilationConfig=require("@aiot-toolkit/shared-utils/compilation-config"),_utils=require("../common/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const SEP=_path.default.sep,{enableMirtos:enableMirtos}=_compilationConfig.compileOptionsObject,{splitChunksNameEnum:splitChunksNameEnum,velaSplitChunksNameEnum:velaSplitChunksNameEnum}=_compilationConfig.compileOptionsMeta,SPLIT_CHUNKS_PAGE_NAME=enableMirtos?velaSplitChunksNameEnum.PAGE:splitChunksNameEnum.PAGE,SPLIT_CHUNKS_APP_NAME=enableMirtos?velaSplitChunksNameEnum.APP:splitChunksNameEnum.APP,MAIN_PKG_NAME=_compilationConfig.compileOptionsMeta.MAIN_PKG_NAME,pluginName="splitChunksAdaptPlugin",actualModuleRequireParam=["module.exports","module","module.exports","__webpack_require__"],moduleRequireNativeFunctions=["$app_define$","$app_bootstrap$","$app_require$","$app_define_wrap$"],velaModuleRequireNativeFunctions=["$app_exports$","$app_require$"],appModuleRequireNativeFunctions=["$app_define$","$app_bootstrap$","$app_require$","$app_define_wrap$"],moduleRequireParams=enableMirtos?[...velaModuleRequireNativeFunctions]:moduleRequireNativeFunctions,appModuleRequireParams=enableMirtos?[...velaModuleRequireNativeFunctions]:appModuleRequireNativeFunctions,actualParamStr=actualModuleRequireParam.concat(moduleRequireParams).join(", "),formalParamStr=moduleRequireParams.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=>{const t=this.options;let o;!t.disableSubpackages&&t.subpackages&&t.subpackages.length>0&&(o=t.subpackages);const n=new Set;let s=[],u="";a.hooks.optimizeChunkIds.tap(pluginName,(t=>{s=(0,_info.getEntryFiles)(e.options.entry);const o=Array.from(t).filter((e=>-1===s.indexOf(`${e.name}.js`))).map((e=>`"${e.id}": "${e.name}.js"`));u=`__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=>{n.add(`${e.name}.js`)}))})),n.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,n=formalParamStr,s=!1;t.match(/\bapp\.js$/)&&(o=actualModuleRequireParam.concat(appModuleRequireParams).join(", "),n=appModuleRequireParams.join(", "));let i=a.assets[t].source();Array.from(a.chunkGraph.getChunkEntryModulesIterable(e))[0]?i=i.replace(/\/\/\s+webpackBootstrap/,(e=>`${e}\n\n\t\t\t\t\t${quickappGlobal}\n\t\t\t\t\t${u}\n`)):s=!0,i=replaceWindowWithGlobalStr(s,i),i=i.replace(/fulfilled\s+=\s+false;/,"fulfilled = false; $app_evaluate$(`${__quickappGlobal.chunkFileMap[chunkIds[j]]}`);"),i=i.replace(/__webpack_require__\.l\(url, loadingEnded,.+\)/g,"$app_evaluate$(`${__quickappGlobal.chunkFileMap[chunkId]}`);loadingEnded();"),i=i.replace(/(__webpack_modules__\[moduleId\])\(\s*module,\s*module\.exports,\s*__webpack_require__/gm,`$1.call(${o}`),i=i.replace(/(\(\(__unused_webpack_module,\s+(exports|__webpack_exports__|__unused_webpack_exports)(,\s+__webpack_require__)?)/g,(e=>e.includes("__webpack_require__")?e+`, ${n}`:e+`, __webpack_require__, ${n}`)),i=i.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 _webpackSources.ConcatSource(i)}))}))})),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((u=>{if(u.match(/\.js$/)&&-1===s.indexOf(u)){const s=a.assets[u].source();n.has(u)?e[SPLIT_CHUNKS_APP_NAME].chunks[u]=s:(e[SPLIT_CHUNKS_PAGE_NAME].chunks[u]=s,o&&a.chunkGroups.forEach((a=>{if(-1!==a.chunks.map((e=>e.name+".js")).indexOf(u)){const t=a.options.name||"",{resource:o,standalone:n}=(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);n?e[o].chunks=e[SPLIT_CHUNKS_PAGE_NAME].chunks:e[o].chunks[u]=s}}))),delete a.assets[u],t.files=[]}}))}));for(const t in e){const o=e[t].chunks;let n="";if(!(0,_utils.isEmptyObject)(o)){if(enableMirtos){for(let e in o)n+=`"${e}": function (global, globalThis, window, $app_exports$, $app_evaluate$){\n ${o[e]}\n },`;n=`export default { ${n} }`}else n=JSON.stringify(o);const s=e[t].jsonFilePath;a.assets[s]=new _webpackSources.ConcatSource(n)}}}))}))}}module.exports=SplitChunksAdaptPlugin; //# sourceMappingURL=splitchunks-adapt-plugin.js.map