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'