UNPKG

kuyin-webpack-plugins

Version:

custom webpack, enhanced-resolve plugins

56 lines (55 loc) 2.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("../utils"); function ensureExtension(path, extension) { if (utils_1.getExtension(path) !== '') { return path; } return `${path}.${extension}`; } function normalizeOptions({ sourceModule, destModule }) { const result = { normalSourceModule: sourceModule, normalDestModule: destModule, }; if (typeof sourceModule === 'string') { result.normalSourceModule = new RegExp(sourceModule); } if (typeof destModule === 'string') { result.normalDestModule = request => { const innerRequest = request.request || request.path; const extension = utils_1.getExtension(innerRequest); const newRequest = {}; Object.keys(request).forEach(key => { const val = request[key]; if (typeof val === 'string') { newRequest[key] = val.replace(ensureExtension(sourceModule, extension), ensureExtension(destModule, extension)); } else { newRequest[key] = val; } }); return newRequest; }; } return result; } // 构建时替换module class ReplaceModuleResolvePlugin { constructor(options) { this.options = options; } apply(resolver) { const { normalSourceModule, normalDestModule } = normalizeOptions(this.options); resolver.getHook('existing-file').tapAsync('ReplaceModuleResolvePlugin', (request, resolveContext, callback) => { const innerRequest = request.request || request.path; // 不需要替换的场景提前返回 if (!normalSourceModule.test(innerRequest)) { return callback(); } const newRequest = normalDestModule(request); return resolver.doResolve('resolved', newRequest, 'ReplaceModuleResolvePlugin', resolveContext, callback); }); } } exports.ReplaceModuleResolvePlugin = ReplaceModuleResolvePlugin;