close
CC 4.0 协议

本节内容派生于以下链接指向的内容 ,并遵守 CC BY 4.0 许可证的规定。

以下内容如果没有特殊声明,可以认为都是基于原内容的修改和删减后的结果。

Node

全局变量:该选项可以配置是否 polyfill 或 mock 某些 Node.js 全局变量

node.global

  • 类型: boolean | 'warn'
  • 默认值: 'warn'

控制 Rspack 在为非 Node 环境打包时,是否需要为 Node.js 的 global 对象提供 polyfill。

关于该对象的具体行为,请参考 Node.js 文档

可选值

  • true:Rspack 会注入 polyfill,使打包产物中能够使用 global。适用于依赖 Node.js 全局变量、但运行在非 Node 环境的代码
  • false:不注入 polyfill。对 global 的引用将保持原样。如果目标环境不支持 global,运行时会抛出 ReferenceError
  • 'warn':行为与 true 相同,会注入 polyfill,同时在使用 global 时额外打印警告

示例

例如,禁用 global polyfill:

rspack.config.mjs
export default {
  node: {
    global: false,
  },
};

node.__filename

  • 类型: boolean | 'mock' | 'warn-mock' | 'eval-only'
  • 默认值:
    • target 不包含 node 时,默认值为 'warn-mock'
    • target 包含 node 时,启用 output.module 则为 'node-module',否则为 'eval-only'

控制 Rspack 在为非 Node 环境打包时,如何处理 Node.js 的 __filenameimport.meta.filename 变量。

可选值

  • true:替换为源文件的文件路径,相对于 context 选项
  • false:不做任何处理,保持原生行为
  • 'mock':替换为 '/index.js'
  • 'eval-only':等同于 false
  • 'warn-mock':替换为 '/index.js',并输出警告,用于提醒代码中存在潜在的 Node 依赖
  • 'node-module':仅在 output.module 启用时使用。将 CommonJS 中的 __filename 替换为基于 import.meta.url 的等价实现,适合 ESM 产物

示例

例如,不对 __filenameimport.meta.filename 进行任何处理:

rspack.config.mjs
export default {
  node: {
    __filename: false,
  },
};

将 ESM 产物中的 __filename 替换为 fileURLToPath(import.meta.url)

rspack.config.mjs
export default {
  target: 'node',
  output: {
    module: true,
  },
  node: {
    __filename: 'node-module',
  },
};

node.__dirname

  • 类型: boolean | 'mock' | 'warn-mock' | 'eval-only'
  • 默认值:
    • target 不包含 node 时,默认值为 'warn-mock'
    • target 包含 node 时,启用 output.module 则为 'node-module',否则为 'eval-only'

控制 Rspack 在为非 Node 环境打包时,如何处理 Node.js 的 __dirnameimport.meta.dirname 变量。

可选值

  • true:替换为源文件的目录路径,相对于 context 选项
  • false:不做任何处理,保持原生行为
  • 'mock':替换为 '/'
  • 'eval-only':等同于 false
  • 'warn-mock':替换为 '/',并输出警告,用于提醒代码中存在潜在的 Node 依赖
  • 'node-module':仅在 output.module 启用时使用。将 CommonJS 中的 __dirname 替换为基于 import.meta.url 的等价实现,适合 ESM 产物

示例

例如,不对 __dirnameimport.meta.dirname 进行任何处理:

rspack.config.mjs
export default {
  node: {
    __dirname: false,
  },
};

将 ESM 产物中的 __dirname 替换为 fileURLToPath(import.meta.url + "/..")

rspack.config.mjs
export default {
  target: 'node',
  output: {
    module: true,
  },
  node: {
    __dirname: 'node-module',
  },
};