首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在webpack的`NormalModuleReplacementPlugin`中,相对的`newResource`的预期行为是什么?

在webpack的`NormalModuleReplacementPlugin`中,相对的`newResource`的预期行为是什么?
EN

Stack Overflow用户
提问于 2018-06-03 14:54:11
回答 1查看 402关注 0票数 1

documentation for webpack's NormalModuleReplacementPlugin中,它声明:

如果newResource是相对的,则相对于上一个资源进行解析。

文档中的示例如下:

代码语言:javascript
复制
new webpack.NormalModuleReplacementPlugin(
  /some\/path\/config\.development\.js/,
  './config.production.js'
);

这让我相信“以前的资源”是正则表达式匹配的导入,而不是请求导入的资源。这一假设是否正确,因为它似乎不起作用,并且plugin's code表明它是不正确的,因为在替换匹配的导入时,它的路径被忽略。

我已经修复了这个问题,将一个函数传递给插件,而不是字符串,但我想知道观察到的行为是否是预期的。

这是一个指向存储库的link,用于显示错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 21:19:55

'previous resource‘是正则表达式匹配的导入

是的,相关代码为here

我创建了一个演示项目https://github.com/loveky/webpack-NormalModuleReplacementPlugin-demo,您可以下载并试用

这是一个使用演示项目的断点。

基于损坏的repo进行更新

如果将src/a/b/c/import3.js中的行从以下位置更改:

代码语言:javascript
复制
import { something } from '../../e/initial.js';

代码语言:javascript
复制
import { something } from '../../e/initial';

那么你应该能够毫无错误地编译。

如果导入../../e/initial.js,则在beforeResolve挂钩中,result.request的格式为:

代码语言:javascript
复制
"../../e/initial.js"

它匹配您的正则表达式/\/e\/initial\.js$/,然后匹配插件updates the request并导致Module not found错误。

如果您导入../../e/initial,它与/\/e\/initial\.js$/不匹配,因为它缺少.js扩展名,那么它将转到afterResolve钩子,其中的路径将被正确替换。

因此,为了使其正常工作,我们应该在导入时省略文件扩展名。插件文档中没有记录这一点。也许你可以在GitHub上提交一个问题,要求作者做出一些澄清。

编辑:

如果你在Windows上,那么路径分隔符是\。因此,要创建一个可以在所有平台上运行的正则表达式,可以使用path.sep

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50663998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档