Node
这些选项可以配置是否 polyfill 或 mock 某些 Node.js 全局变量 (opens new window)和模块。这可以使最初为 Node.js 环境编写的代码,在其他环境(如浏览器)中运行。
此功能由 webpack 内部的 NodeStuffPlugin
(opens new window) 插件提供。如果 target 是 "web"(默认)或 "webworker",那么 NodeSourcePlugin
(opens new window) 插件也会被激活。
# node
type
:object
是一个对象,其中每个属性都是 Node.js 全局变量或模块的名称,每个 value 是以下其中之一……
true
:提供 polyfill。"mock"
:提供 mock 实现预期接口,但功能很少或没有。"empty"
:提供空对象。false
: 什么都不提供。预期获取此对象的代码,可能会因为获取不到此对象,触发ReferenceError
而崩溃。尝试使用require('modulename')
导入模块的代码,可能会触发Cannot find module "modulename"
错误。
注意,不是每个 Node 全局变量都支持所有选项。对于不支持的键值组合(property-value combination),compiler 会抛出错误。更多细节请查看接下来的章节。
这里是默认值:
node: {
console: false,
global: true,
process: true,
__filename: "mock",
__dirname: "mock",
Buffer: true,
setImmediate: true
// 更多选项,请查看“其他 Node.js 核心库”
}
2
3
4
5
6
7
8
9
10
11
从 webpack 3.0.0 开始,node
选项可能被设置为 false
,以完全关闭 NodeStuffPlugin
和 NodeSourcePlugin
插件。
# node.console
type
:boolean | 'mock'
默认值:
false
浏览器提供一个 console
对象,具有非常类似 Node.js
console
的接口,所以通常不需要 polyfill
。
# node.process
type
:boolean | "mock"
默认值:true
# node.global
type
:boolean
默认值:true
关于此对象的准确行为,请查看源码 (opens new window)。
# node.__filename
type
:boolean | "mock"
默认值:"mock"
选项:
true
: 输入文件的文件名,是相对于context
选项 (opens new window)。false
: 常规的 Node.js__filename
行为。在 Node.js 环境中运行时,输出文件的文件名。"mock"
: value 填充为"index.js"
.
# node.__dirname
type
:boolean | "mock"
默认值:"mock"
选项:
true
: 输入文件的目录名,是相对于context
选项 (opens new window)。false
: 常规的 Node.js__dirname
行为。在 Node.js 环境中运行时,输出文件的目录名。"mock"
: value 填充为"/"
。
# node.Buffer
type
:boolean | "mock"
默认值:true
# node.setImmediate
type
:boolean | "mock" | "empty"
默认值:true
# 其他 Node.js
核心库(Node.js core libraries
)
type
:boolean | "mock" | "empty"
只有当 target 是未指定、"web" 或 "webworker" 这三种情况时,此选项才会被激活(通过
NodeSourcePlugin
)。
当 NodeSourcePlugin
插件启用时,则会使用 node-libs-browser
(opens new window) 来对 Node.js 核心库 polyfill。请查看 Node.js 核心库及其 polyfills (opens new window) 列表。
默认情况下,如果有一个已知的 polyfill,webpack 会对每个 library 进行 polyfill,如果没有,则 webpack 不会执行任何操作。在后一种情况下,如果模块名称配置为 false
值,webpack 表现为不会执行任何操作。
为了导入内置的模块,使用
__non_webpack_require__
(opens new window),例如,使用__non_webpack_require__('modulename')
而不是require('modulename')
。
示例:
node: {
dns: "mock",
fs: "empty",
path: true,
url: false
}
2
3
4
5
6