知海

Node 配置

webpackjsorg-main配置参考

Node 配置

以下 Node.js 选项用于配置是否对某些 Node.js 全局变量 进行 polyfill 或 mock。

该功能由 webpack 内部的 NodeStuffPlugin 插件提供。

警告: 从 webpack 5 开始,你只能在 node 选项下配置 global__filename/import.meta.filename__dirname/import.meta.dirname。如果你正在寻找如何在 webpack 5 下对类似 fs 的 Node.js 模块进行 polyfill,请查看 resolve.fallback 获取帮助。

node

false object

webpack.config.js

js 复制代码
export default {
  // ...
  node: {
    global: false,
    __filename: false,
    __dirname: false,
  },
};

可以将 node 选项设置为 false,以完全关闭 NodeStuffPlugin 插件。

node.global

boolean 'warn'

提示: 如果你使用的模块需要其中的全局变量,请使用 ProvidePlugin 而不是 global

关于此对象的精确行为,请参阅 Node.js 文档

选项:

  • true:提供 polyfill,如果你的环境支持则使用 globalThis,请参阅 environment 选项。
  • false:不提供任何内容。期望使用此对象的代码可能会抛出 ReferenceError 而崩溃。
  • 'warn':使用 global 时显示警告。

node.__filename

boolean 'mock' | 'warn-mock' | 'node-module' | 'eval-only'

选项:

  • true输入文件相对于 context 选项 的文件名。
  • false:webpack 不会修改你的 __filenameimport.meta.filename 代码,这意味着你拥有常规的 Node.js __filenameimport.meta.filename 行为。在 Node.js 环境中运行时,该值为输出文件的文件名。
  • 'mock':固定值 '/index.js'
  • 'warn-mock':使用固定值 '/index.js',但会显示警告。
  • 'node-module':当 output.module 启用时,将 CommonJS 模块中的 __filename 和 ES 模块中的 import.meta.filename 代码替换为 fileURLToPath(import.meta.url)
  • 'eval-only':将 __filename/import.meta.filename 的解析延迟到执行时的 Node.js 运行时,但在 require/import 等构造中对其进行求值,以便正确解析模块。根据 output.module 选项,将 __filename 替换为 import.meta.filename,反之亦然(如果你的环境不支持 import.meta.filename,将使用 import.meta.url 作为回退来获取该值)。

默认值可能受不同的 target 影响:

  • 如果 target 设置为 'node' 或类 Node 环境(async-nodeelectron),或混合目标(同时包含 webnode),则默认为 'eval-only'
  • 如果 target 设置为 'web' 或类 Web 环境,则默认为 'mock'

node.__dirname

boolean 'mock' | 'warn-mock' | 'node-module' | 'eval-only'

选项:

  • true输入文件相对于 context 选项 的目录名。
  • false:webpack 不会修改你的 __dirnameimport.meta.dirname 代码,这意味着你拥有常规的 Node.js __dirnameimport.meta.dirname 行为。在 Node.js 环境中运行时,该值为输出文件的目录名。
  • 'mock':固定值 '/'
  • 'warn-mock':使用固定值 '/',但会显示警告。
  • 'node-module':当 output.module 启用时,将 CommonJS 模块中的 __dirname 替换为 fileURLToPath(import.meta.url + "/..")
  • 'eval-only':将 __dirname/import.meta.dirname 的解析延迟到执行时的 Node.js 运行时,但在 require/import 等构造中对其进行求值,以便正确解析模块。根据 output.module 选项,将 __dirname 替换为 import.meta.dirname,反之亦然(如果你的环境不支持 import.meta.filename,将使用 import.meta.url 作为回退来获取该值)。

默认值可能受不同的 target 影响:

  • 如果 target 设置为 'node' 或类 Node 环境(async-nodeelectron),或混合目标(同时包含 webnode),则默认为 'eval-only'
  • 如果 target 设置为 'web' 或类 Web 环境,则默认为 'mock'

帮助我们改进文档

发现翻译问题或内容错误?请告诉我们。