我正在尝试创建一个 webpack 插件,它允许我覆盖node_modules
在文件夹中找到匹配项时找到的“任何”javascript 模块src/override
。
我一直在尝试使用NormalModuleReplacementPlugin
,因为它看起来是最直接的方法,但我已经花了一整天的时间,它还没有工作。
const overrideModulesPlugin = new NormalModuleReplacementPlugin(
/node_modules/,
function(resource) {
const replacedRequest = resource.request.replace(
/node_modules/,
'src/override'
);
let moduleToSearch = replacedRequest;
if (moduleToSearch.includes('!')) {
moduleToSearch = moduleToSearch.substring(
moduleToSearch.lastIndexOf('!') + 1
);
}
if (fs.existsSync(moduleToSearch)) {
console.log(`Using ${moduleToSearch}`);
resource.request = replacedRequest;
}
}
);
我发现了一些问题:
- 一些模块是用 bang (!) 请求的,主要是那些由 webpack 或 css-loader 请求的。
- 有些包
node_modules
里面包含一个文件夹,这会产生许多新的冲突。
我不是在问这样做是否是一个好主意,或者是否有更好的方法来做到这一点,我只是在寻求帮助,因为这是我目前正在开发的概念证明。
另外,我使用的是 Webpack 4,无法更新到 Webpack 5。
编辑:有一个包可以做类似的事情,但我不喜欢它如何使用钩子。https://github.com/fooman/venia-ui-override-resolver