1. Node
这些选项将配置是否填充(polyfill)或模拟某个Node.js 全局变量和模块。这允许最初为Node.js 环境编写代码,以来在其他环境中运行,比如浏览器。
这个特性是由webpack内部的NodeStuffPlugin
提供的。如果目标是“web”(默认)或“webworker”,NodeSourcePlugin
插件也会被激活。
1.1. node
类型:object
这是一个对象,其中每个属性都是一个Node全局变量或模块的名称,每个值可能是下面的一个。
true
: 提供一个polyfill。"mock"
: 提供一个实现预期接口的mock,但它几乎没有或没有功能。"empty"
: 提供一个空对象。false
: 不提供任何东西。预期该对象的代码可能会产生ReferenceError而
崩溃。试图使用require('modulename')
导入模块的代码可能触发一个Cannot find module "modulename"
错误。
[warning] 注:
并不是所有的Node 全局变量都支持这四个选项。编译器将为不受支持的属性值组合抛出一个错误(例如:
process: 'empty'
)。更多细节请参见下面的部分。
这些是默认值:
node: {
console: false,
global: true,
process: true,
__filename: "mock",
__dirname: "mock",
Buffer: true,
setImmediate: true
// 请参阅“其他 node 核心库”以获得更多选项。
}
由于webpack 3.0.0,node
选项可能被设置为false,以完全关闭NodeStuffPlugin
和NodeSourcePlugin
插件。
1.1.1. node.console
类型:boolean | "mock"
默认值: false
浏览器提供了一个与Node.js console
非常相似的console
对象,所以通常不需要 polyfill。
1.1.2. node.process
类型:boolean | "mock"
默认值: true
1.1.3. node.global
类型:boolean
默认: true
查看该对象的确切行为的源码。
1.1.4. node.__filename
类型:boolean | "mock"
默认值: "mock"
Options:
true
: 相对于context
选项 的输入文件的文件名。false
: The regular Node.js__filename
behavior. The filename of the output file when run in a Node.js environment.普通的Node.js__filename
行为。在 Node.js 环境中运行时输出文件的文件名。"mock"
: 固定值“index.js”
。
1.1.5. node.__dirname
类型:boolean | "mock"
默认: "mock"
Options:
true
: 相对于context
选项 的输入文件的目录名称 (dirname)。false
: 普通的Node.js__dirname
行为。在 Node.js 环境中运行时输出文件的dirname。"mock"
: 固定值" / "。
1.1.6. node.Buffer
类型:boolean | "mock"
默认: true
1.1.7. node.setImmediate
类型:boolean | "mock" | "empty"
默认: true
1.2. 其他 node 核心库
类型:boolean | "mock" | "empty"
[warning] 注:
这个选项只有在目标未指明的情况下才会被激活(通过
NodeSourcePlugin
),“web”或“webworker”。
当NodeSourcePlugin
插件启用时,如果可以,来自node-libs-browser
的 Node.js 核心库的Polyfills被使用。查看Node.js 核心库和他们的polyfills。
在默认情况下,如果有一个已知的polyfill,webpack 将会在每个库中进行polyfills,或者什么都不做。在后一种情况下,webpack会表现得好像模块名配置了false
值。
[info] 注:
为了导入一个内置模块,使用
__non_webpack_require__
,例如:__non_webpack_require__('modulename')
而不是require('modulename')
示例:
node: {
dns: "mock",
fs: "empty",
path: true,
url: false
}