CC 4.0 协议
本节内容派生于以下链接指向的内容 ,并遵守 CC BY 4.0 许可证的规定。
以下内容如果没有特殊声明,可以认为都是基于原内容的修改和删减后的结果。
模块变量
本节涵盖了使用 Rspack 编译代码时所有可用的变量。模块将能够通过 module 和其他变量访问来自编译过程的特定数据。
CommonJS
module.loaded
false 表示该模块正在执行, true 表示同步执行已经完成。
module.id
当前模块的 ID。
module.hot
是否启用了热模块替换,并提供了一些方法来处理该过程。有关详细信息,请参阅 HMR API 页面。
global
Rspack 会将 global 替换为代理对象并在其中处理兼容性问题。
__filename
依赖于配置项 node.__filename。
false:未定义mock:等于'/index.js'true:NodeJs __filename
如果在一个被 Parser 解析的表达式内部使用,则配置选项会被当作 true 处理。
__dirname
依赖于配置项 node.__dirname。
false:未定义mock:等于'/'true:NodeJs __dirname
如果在一个被 Parser 解析的表达式内部使用,则配置选项会被当作 true 处理。
import.meta(ESM)
import.meta 将特定上下文的元数据暴露给 JavaScript 模块,例如模块的 URL。它仅在支持 ESM(模块类型为 javascript/auto 或 javascript/esm)的模块中可用。
通常情况下,未知的 import.meta 元数据默认会被替换为 undefined。当使用 ESM 格式输出时,module.parser.javascript.importMeta 的默认值为 'preserve-unknown',因此未知的元数据会被保留并在运行时被计算。
Rspack 在编译时会静态分析将 import.meta 的属性替换为具体值,因此不支持动态访问 import.meta(如 Object.keys(import.meta)),否则会抛出警告。你应该通过属性访问或解构赋值的方式来访问 import.meta 上的元数据。
import.meta.url
返回当前模块的以 file: 开头的绝对路径 URL 字符串。
import.meta.main
返回一个布尔值,表示当前模块是否为入口模块。
import.meta.filename
返回当前模块的完整文件路径,是 __filename 的 ESM 等价写法。常用于在 ESM 模块中获取当前文件的路径信息。
具体的编译行为由 node.__filename 配置项控制,详见该配置文档。
import.meta.dirname
返回当前模块所在的目录路径,是 __dirname 的 ESM 等价写法。常用于在 ESM 模块中构造基于当前文件位置的路径。
具体的编译行为由 node.__dirname 配置项控制,详见该配置文档。
import.meta.resolve
是 require.resolve() 的 ESM 等价写法,用于获取其他模块的 ID。会将模块打包进最终的 bundle 中,并返回该模块的模块 ID。
import.meta.resolve() 目前仍是实验性功能,需要通过 module.parser.javascript.importMetaResolve 开启,未来会优先对齐标准实现,因此该 API 行为可能会发生变化,请谨慎使用。
import.meta.webpackContext
import.meta.webpackContext 是 require.context() 的 ESM 等价写法,它允许你动态地引入一组模块。
你可以在代码中使用 import.meta.webpackContext,Rspack 将在构建时进行解析并引用匹配的模块。
- 类型:
- 示例:
Rspack 在编译时,会通过静态分析来解析 import.meta.webpackContext() 的参数,因此参数必须是字面量。
例如,regExp 的值不允许传入一个变量,也不允许传入 new RegExp() 生成的值,只能是一个正则表达式字面量。
context API
import.meta.webpackContext() 返回的 context 是一个函数,它接收一个 request 参数(模块路径)。
这个函数有三个属性:resolve,keys 与 id。
resolve是一个函数,它返回模块标识符被解析后得到的模块 id。keys也是一个函数,它返回一个数组,由所有可能被此上下文模块处理的请求组成。id是上下文模块的模块 id. 它可能在使用module.hot.accept时会用到。
如果你想引入一个文件夹下面的所有文件,或者引入能匹配一个正则表达式的所有文件,这个功能就会很有帮助。
考虑一种情况,你有一个这样的文件夹结构:
你可以使用 import.meta.webpackContext() 动态导入文件夹中的所有组件:
import.meta.webpackContext() 简化了模块导入过程,尤其是当你有大量模块需要管理时。在使用时,请避免匹配到不需要的文件,否则可能导致构建时间和产物体积明显增加。
import.meta.webpackHot
是 module.hot 的 ESM 等价写法,import.meta.webpackHot 可以在严格 ESM 模块(模块类型为 javascript/esm)中使用,而 module.hot 不能。
Runtime
__webpack_hash__
提供对编译过程中(compilation)的 hash 信息的访问。
__webpack_runtime_id__
访问当前入口的 runtime chunk 的 id。
__webpack_public_path__
等于配置选项的 output.publicPath。
查看 动态设置 publicPath 了解更多关于
__webpack_public_path__的用法。
__webpack_base_uri__
运行时获取或修改 Base URI。
__webpack_nonce__
Rspack 能够为其加载的所有脚本添加 nonce,即一次性随机数。在入口文件中设置 __webpack_nonce__ 变量以激活此功能。
Modules
__webpack_modules__
访问所有模块的内部对象。
__webpack_module__
它提供对当前 module 的访问。module 在 ESM 严格模式下不可用。
__webpack_module__.id
它提供对当前 module(module.id) ID 的访问。module 在 ESM 严格模式下不可用。
__webpack_require__
原始 require 函数。这个表达式不会被解析器解析为依赖。
__non_webpack_require__
生成一个不会被 Rspack 解析的 require 函数。配合全局可以获取到的 require 函数,可以完成一些酷炫操作。
__webpack_is_included__
测试给定的模块是否被 Rspack 打包。
__resourceQuery
当前模块的资源查询(resource query)。如果进行了如下的 require 调用,那么查询字符串(query string)在 file.js 中可用。
__webpack_exports_info__
在模块中通过 __webpack_exports_info__ 可以读取如下导出信息:
__webpack_exports_info__始终为true- 当导出未被引用时
__webpack_exports_info__.<exportName>.used为false,否则为true __webpack_exports_info__.<exportName>.useInfo值如下:false:导出未被引用true:导出被引用null:导出是否被引用依赖运行时条件判断undefined:无法判断导出的引用情况
__webpack_exports_info__.<exportName>.provideInfo值如下:false:导出未被提供true:导出被提供null:导出是否被提供依赖运行时条件判断undefined:无法判断导出的提供情况
- 支持访问导出的多级子属性:如
__webpack_exports_info__.<exportName>.<exportProperty1>.<exportProperty2>.used - 通过
__webpack_exports_info__.<exportName>.canMangle判断导出是否可被重命名
Chunks
__webpack_chunkname__
访问当前 chunk 的名称。
__webpack_chunk_load__
内部 chunk 载入函数,有一个输入参数:
chunkId: 需要载入的 chunk id
以下为当一个 chunk 加载失败时,从备用公共路径加载 chunk 的示例:
__webpack_get_script_filename__
通过 chunk 的 id 获取 chunk 的文件名。
可以通过赋值来在运行时修改它的行为。比如以下示例,在最终加载 chunk 的路径后增加特定后缀。
Module Federation
__webpack_share_scopes__
用于存储 module federation 中的一个远程容器共享作用域 (shared scope) 相关信息。
__webpack_init_sharing__
用于初始化 module federation 中的一个远程容器共享作用域 (shared scope) 并加载相关模块。
System.js
__system_context__
可在 output.library.type="system" 时获取 System.js 上下文。
Rspack
__rspack_version__
当前使用的 Rspack 版本,默认从 @rspack/core/package.json 读取。可以通过
output.bundlerInfo.version 修改。
__rspack_unique_id__
当前打包工具的 ID,值为 {bundler}@{version}。其中:
bundler:默认为"rspack"可以通过 output.bundlerInfo.bundler 修改。version:默认从@rspack/core/package.json读取,可以通过 output.bundlerInfo.version 修改。

