@hap-toolkit/dsl-vue
Version:
webpack {loader,plugin} for supporting vue in quickapp
3 lines (2 loc) • 2.55 kB
JavaScript
;var _path=_interopRequireDefault(require("@jayfate/path")),_webpackSources=require("webpack-sources"),_info=require("@hap-toolkit/packager/lib/common/info.js"),_compilationConfig=require("@hap-toolkit/shared-utils/compilation-config");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const extList=[".mix",".ux",".vue"];class InstVuePlugin{constructor(e){this.options=e}apply(e){const n=this;e.hooks.compilation.tap("InstVuePlugin",(function(t){t.hooks.optimizeChunkAssets.tapAsync("InstVuePlugin",(function(o,i){const a=(0,_info.getEntryFiles)(e.options.entry);o.forEach((function(e){if(e.entryModule){if(_path.default.extname(Array.from(e.entryModule.buildInfo.fileDependencies)[0])!==extList[2])return}e.files.forEach((function(e){const o=n.instVue(e,t,a);o&&(t.assets[e]=o)}))})),i()}))}))}instVue(e,n,t){if(/\.js$/.test(e)){if(_compilationConfig.compileOptionsObject.splitChunksMode===_compilationConfig.compileOptionsMeta.splitChunksModeEnum.SMART&&-1===t.indexOf(e))return new _webpackSources.ConcatSource(n.assets[e]);{let t=n.assets[e].source();return t=this.replaceFlagContent(t),e.match(/\bapp\.js$/)?new _webpackSources.ConcatSource("(function(){\n var __flag = 0;\n var handler = function() {\n return ",t,`\n };\n if (typeof window === "undefined") {\n let options = handler();\n options.default['manifest'] = ${JSON.stringify(global.framework.manifest)};\n $app_define$(options.default);\n $app_bootstrap$();\n }\n })();`):new _webpackSources.ConcatSource("(function(){\n var __flag = 0;\n var handler = function() {\n return ",t,"\n };\n if (typeof window === \"undefined\") {\n let options = handler();\n options = options.default ? options.default: options;\n options['type'] = 'page';\n new Vue({render: function(h) {return h(options)}}).$mount('#app');\n }\n })();")}}}replaceFlagContent(e){return e=(e=e.replace("{ fulfilled = false; $app_evaluate$(`${__quickappGlobal.chunkFileMap[depId]}.js`); }","{ fulfilled = false; __flag++; $app_evaluate$(`${__quickappGlobal.chunkFileMap[depId]}.js`); __flag--; }")).replace(/(?<=result\s*=\s*__webpack_require__\(__webpack_require__\.s\s*=\s*deferredModule\[0\]\);\s*.*\})/,(e=>`${e}\n/******/\t\t\t__flag === 0 && (result = result || __webpack_require__(__webpack_require__.s = deferredModule[0]));`))}}module.exports=InstVuePlugin;
//# sourceMappingURL=instvue-plugin.js.map