问题描述
今天使用webpack 5.1.1设置构建系统时,webpack告诉我,自4.x以来,API发生了变化,并且webpack默认不再包含Node.js核心模块的polyfill,但是我可以自己包含一个使用require.resolve()
来添加后备缺失的时间(显然是在非Node上下文中)。
到目前为止一切顺利。但是,尚不清楚的是,为什么在其中一些指令中,在模块名称后加了斜杠,而在其他情况下却没有斜杠。
节录摘录:
不带斜杠的示例:
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()
参数中的斜杠是什么意思?
解决方法
想法如下。 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使用) 名为buffer的npm模块,而不是名为node.js核心模块的模块 缓冲!