UNPKG

mpx-webpack-plugin

Version:

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

61 lines (53 loc) 2.53 kB
const { Tapable, SyncBailHook, SyncWaterfallHook } = require("tapable"); const RawModule = require("webpack/lib/RawModule"); const MPXMultiModule = require("./MPXMultiModule"); const MPXSingleEntryDependency = require("./dependencies/MPXSingleEntryDependency"); const path = require("path"); const LoaderUtils = require("loader-utils"); module.exports = class MPXMultiModuleFactory extends Tapable { constructor( resolverFactory ) { super(); this.resolverFactory = resolverFactory; this.hooks = { resolvedData: new SyncWaterfallHook(["data"]), createModule: new SyncBailHook(["data"]), }; } create( data, callback ) { const dependency = data.dependencies[0]; const context = data.context; const contextInfo = data.contextInfo; const resolveOptions = data.resolveOptions || {}; const request = dependency.request; this.resolverFactory.get("miniprogram", resolveOptions).resolve( contextInfo, context, request, {}, ( err, resource, resourceResolveData ) => { if ( err ) return callback(err); resourceResolveData = this.hooks.resolvedData.call(resourceResolveData); if ( !resourceResolveData || !resourceResolveData.miniprogramData ) { return callback( new Error(resource + " doesn't exist or is not a miniprogram entry") ); } const createdModule = this.hooks.createModule.call({ dependency, context, contextInfo, resourceResolveData }); if ( !createdModule ) { const { files, name, context } = resourceResolveData.miniprogramData; return callback( null, new MPXMultiModule({ "name": name, "context": context, "request": path.join(context, name), "metadata": dependency.metadata, "dependencies": files.map(item => new MPXSingleEntryDependency(LoaderUtils.urlToRequest(item), name, item, dependency.metadata)) }) ); } return callback(null, createdModule); } ); } }