require.resolve() 参数中的斜杠是啥意思?

Posted

技术标签:

【中文标题】require.resolve() 参数中的斜杠是啥意思?【英文标题】:What does a trailing slash in the parameter of require.resolve() mean?require.resolve() 参数中的斜杠是什么意思? 【发布时间】:2021-02-01 09:56:51 【问题描述】:

今天在使用 webpack 5.1.1 设置构建系统时,webpack 告诉我,从 4.x 开始,API 发生了变化,默认情况下 webpack 不再包含用于 Node.js 核心模块的 polyfill,但我可以自己包含一个使用require.resolve() 为这些缺失添加回退(它们显然在非节点上下文中)。

到目前为止一切顺利。然而,不清楚的是为什么在这些指令中的一些说明中,模块名称后面会加上斜杠,而在其他情况下却没有斜杠。

日志摘录:

不带斜杠的示例:

If you want to include a polyfill, you need to:
    - add a fallback 'resolve.fallback:  "stream": require.resolve("stream-browserify") '
    - install 'stream-browserify'

带有斜杠的示例:

If you want to include a polyfill, you need to:
    - add a fallback 'resolve.fallback:  "buffer": require.resolve("buffer/") '
    - install 'buffer'

这让我想到了我的问题:require.resolve() 参数中的斜杠是什么意思?

【问题讨论】:

【参考方案1】:

想法如下。 buffer 是核心节点模块之一。如果你做require.resolve('buffer')节点模块解析算法会找到这个文件lib/buffer.js。但是您希望它实际上绕过核心模块并在node_modules 文件夹中查找。添加尾部斜杠就可以了。

来自缓冲模块docs

要显式依赖这个模块(没有 browserify),需要它 像这样:

var Buffer = require('buffer/').Buffer // note: the trailing slash is important!

要明确要求这个模块,请使用require('buffer/') 告诉 要使用的 node.js 模块查找算法(也由 browserify 使用) npm 模块名为 buffer 而不是 node.js 核心模块名为 缓冲!

【讨论】:

以上是关于require.resolve() 参数中的斜杠是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

错误:在 require.resolve('jquery') webpack 上找不到模块 'jquery'

1.路由参数中的正斜杠

角度路由器:忽略路径参数中的斜杠

Yarn 2 / Webpack require.resolve UseEntry 数组无法引用加载器

Laravel 5中带有可选参数的url中的两个斜杠

python中的正斜杠反斜杠