在线文档教程

节点 | Node

节点

这些选项可以配置是否 polyfill 或 mock 某些 Node.js 全局变量和模块。这可以使最初为 Node.js 环境编写的代码,在其他环境(如浏览器)中运行。

此功能由 webpack 内部的 NodeStuffPlugin 插件提供。如果 target 是 "web"(默认)或 "webworker",那么 NodeSourcePlugin 插件也会被激活。

node

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 // See "Other node core libraries" for additional options. }

从 webpack 3.0.0 开始,node 选项可能被设置为 false,以完全关闭 NodeStuffPluginNodeSourcePlugin 插件。

node.console

boolean | "mock"

默认: false

浏览器提供一个 console 对象,具有非常类似 Node.js console 的接口,所以通常不需要 polyfill。

node.process

boolean | "mock"

默认: true

node.global

boolean

Default: true

请参阅源代码以了解此对象的确切行为。

node.__filename

boolean | "mock"

默认: "mock"

选项:

  • true: 输入文件的文件名,是相对于 context 选项。

  • false:常规的Node.js __filename行为。在Node.js环境中运行时的输出文件的文件名。

  • "mock":固定值"index.js"

node.__dirname

boolean | "mock"

默认: "mock"

选项:

  • true输入文件的目录名,是相对于 context 选项。

  • false: 常规的 Node.js __dirname 行为。在 Node.js 环境中运行时,输出文件的目录名。

  • "mock":value 填充为 "/"

node.Buffer

boolean | "mock"

默认: true

node.setImmediate

boolean | "mock" | "empty"

默认: true

其他节点核心库

boolean | "mock" | "empty"

只有当 target 是未指定、"web" 或 "webworker" 这三种情况时,此选项才会被激活(通过 NodeSourcePlugin)。

NodeSourcePlugin 插件启用时,则会使用 node-libs-browser 来对 Node.js 核心库 polyfill。请查看 Node.js 核心库及其 polyfills 列表。

默认情况下,如果有一个已知的 polyfill,webpack 会对每个 library 进行 polyfill,如果没有,则 webpack 不会执行任何操作。在后一种情况下,如果模块名称配置为 false 值,webpack 表现为不会执行任何操作。

为了导入内置的模块,使用 __non_webpack_require__,例如,使用 __non_webpack_require__('modulename') 而不是 require('modulename')

例:

node: { dns: "mock", fs: "empty", path: true, url: false }