在documentation for webpack's NormalModuleReplacementPlugin中,它声明:
如果
newResource是相对的,则相对于上一个资源进行解析。
文档中的示例如下:
new webpack.NormalModuleReplacementPlugin(
/some\/path\/config\.development\.js/,
'./config.production.js'
);这让我相信“以前的资源”是正则表达式匹配的导入,而不是请求导入的资源。这一假设是否正确,因为它似乎不起作用,并且plugin's code表明它是不正确的,因为在替换匹配的导入时,它的路径被忽略。
我已经修复了这个问题,将一个函数传递给插件,而不是字符串,但我想知道观察到的行为是否是预期的。
这是一个指向存储库的link,用于显示错误。
发布于 2018-06-03 21:19:55
'previous resource‘是正则表达式匹配的导入
是的,相关代码为here
我创建了一个演示项目https://github.com/loveky/webpack-NormalModuleReplacementPlugin-demo,您可以下载并试用
这是一个使用演示项目的断点。

基于损坏的repo进行更新
如果将src/a/b/c/import3.js中的行从以下位置更改:
import { something } from '../../e/initial.js';至
import { something } from '../../e/initial';那么你应该能够毫无错误地编译。
如果导入../../e/initial.js,则在beforeResolve挂钩中,result.request的格式为:
"../../e/initial.js"它匹配您的正则表达式/\/e\/initial\.js$/,然后匹配插件updates the request并导致Module not found错误。
如果您导入../../e/initial,它与/\/e\/initial\.js$/不匹配,因为它缺少.js扩展名,那么它将转到afterResolve钩子,其中的路径将被正确替换。
因此,为了使其正常工作,我们应该在导入时省略文件扩展名。插件文档中没有记录这一点。也许你可以在GitHub上提交一个问题,要求作者做出一些澄清。
编辑:
如果你在Windows上,那么路径分隔符是\。因此,要创建一个可以在所有平台上运行的正则表达式,可以使用path.sep。
https://stackoverflow.com/questions/50663998
复制相似问题