UNPKG

mpx-webpack-plugin

Version:

原生小程序开发套装(Mini Program X) -------------------------------

53 lines (48 loc) 2.38 kB
const NodeMainTemplatePlugin = require("webpack/lib/node/NodeMainTemplatePlugin"); const Template = require("webpack/lib/Template"); const { ConcatSource } = require("webpack-sources"); const PLUGIN_NAME = "MPXMainTemplatePlugin"; module.exports = class MPXMainTemplatePlugin { apply( mainTemplate ) { new NodeMainTemplatePlugin({ "asyncChunkLoading": false }).apply(mainTemplate); mainTemplate.hooks.bootstrap.tap(PLUGIN_NAME, ( source, chunk, hash ) => { return Template.asString([ source, ``, `// install a JSONP callback for chunk loaded`, `function webpackJsonpCallback( chunkIds, moreModules, executeModules ) { `, Template.indent([ `for ( var moduleId in moreModules ) { `, Template.indent([ `if ( Object.prototype.hasOwnProperty.call(moreModules, moduleId) ) { `, Template.indent([ mainTemplate.renderAddModule(hash, chunk, "moduleId", "moreModules[moduleId]"), ]), `}`, ]), `}`, ]), ``, Template.indent([ `if ( executeModules && executeModules.length ) { `, Template.indent([ `return ${mainTemplate.requireFn}(${mainTemplate.requireFn}.s = executeModules[0]);` ]), `}`, ]), `}`, ]); }); mainTemplate.hooks.beforeStartup.tap(PLUGIN_NAME, ( source, chunk, hash ) => { const jsonpFunction = mainTemplate.outputOptions.jsonpFunction; return Template.asString([ `var context = ((typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : this) || (new Function("return this"))());`, ``, `if ( context ) { `, Template.indent([`context[${JSON.stringify(jsonpFunction)}] = webpackJsonpCallback;`]), `}`, source, ]); }); } }