UNPKG

mpx-webpack-plugin

Version:

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

124 lines (97 loc) 5.4 kB
const JsonGenerator = require("webpack/lib/JsonGenerator"); const MPXMetaDataKind = require("./metadata/MPXMetaDataKind"); const { RawSource } = require("webpack-sources"); const Template = require("webpack/lib/Template"); const path = require("path"); const MPXExternalPluginDependency = require("./dependencies/MPXExternalPluginDependency"); module.exports = class MPXJsonGenerator extends JsonGenerator { constructor( options ) { super(options); this.options = options; this.forceRelative = options.forceRelative === void 0 ? true : !!options.forceRelative; } generate( module, dependencyTemplates, runtimeTemplate, type = "javascript" ) { if ( !module.buildInfo.isMerged ) { module.buildInfo.isMerged = true; const data = module.buildInfo.jsonData; const metadata = module.metadata; const context = path.dirname(module.getChunks()[0].name); if ( metadata.kind === MPXMetaDataKind.APP ) { if ( module.buildInfo.pageDependencies ) { const dependencies = module.buildInfo.pageDependencies; const pages = []; for ( const dependency of dependencies ) { const ref = dependency.getReference(); if ( ref && ref.module && !ref.weak ) { const module = ref.module; const chunk = module.getChunks()[0]; if ( this.forceRelative ) { pages.push(path.posix.relative(context, chunk.name)); } else { pages.push("/" + chunk.name); } } } data.pages = pages; } if ( module.buildInfo.tabbarDependencies ) { if ( !data.tabBar ) { data.tabBar = {}; } if ( !data.tabBar.list ) { data.tabBar.list = []; } const dependencies = module.buildInfo.tabbarDependencies; const list = data.tabBar.list; for ( const dependency of dependencies ) { const ref = dependency.getReference(); if ( ref && ref.module && !ref.weak ) { const module = ref.module; const chunk = module.getChunks()[0]; const item = (list[dependency.metadata.index] || {}); if ( this.forceRelative ) { item.pagePath = path.posix.relative(context, chunk.name); } else { item.pagePath = "/" + chunk.name; } } } data.tabBar.list = list; } } else if ( metadata.kind === MPXMetaDataKind.PAGE || metadata.kind === MPXMetaDataKind.COMPONENT ) { if ( module.buildInfo.componentDependencies ) { const dependencies = module.buildInfo.componentDependencies; const components = {}; for ( const dependency of dependencies ) { const tagname = dependency.metadata.tagname; if ( dependency instanceof MPXExternalPluginDependency ) { components[tagname] = dependency.request; } else { const ref = dependency.getReference(); if ( ref && ref.module && !ref.weak ) { const module = ref.module; const chunk = module.getChunks()[0]; if ( this.forceRelative ) { components[tagname] = path.posix.relative(context, chunk.name); } else { components[tagname] = "/" + chunk.name; } } } } data.usingComponents = components; } } } if ( type === "miniprogram/json" ) { return new RawSource(JSON.stringify(module.buildInfo.jsonData)); } else { return new RawSource( Template.toNormalComment(`extracted miniprogram json => "${module.name}"`) + "\n" + Template.toNormalComment(`${JSON.stringify(module.buildInfo.jsonData, null, 4)}`) ); } } }