本节内容派生于以下链接指向的内容 ,并遵守 CC BY 4.0 许可证的规定。
以下内容如果没有特殊声明,可以认为都是基于原内容的修改和删减后的结果。
模块解析:该选项用于配置 Rspack 模块解析逻辑。
Object
Record<string, false | string | (string | false)[]>
{}
路径别名,例如:
此时:
require("@/a")
会尝试解析 <root>/src/a
。require("abc")
会尝试解析 <root>/src/abc
。require("abc/file.js")
不会命中匹配规则,它会尝试去解析 node_modules/abc/files.js
。string[]
['browser']
定义一个字段,例如 browser
,以依照此规范进行解析。
string[]
指定用于匹配包 exports
字段 入口点的 condition names(条件名称)。
Rspack 默认的 conditionNames
由 mode、target 和模块类型共同决定。
在上述示例中:
mode
由 mode 配置决定,开发模式下为 development
,其他模式为 production
。target
由 target 配置决定:
target
包含 web
,则为 browser
。target
包含 node
,则为 node
。target
包含 webworker
,则为 worker
。target
包含 electron
,则为 electron
。target
包含 nwjs
,则为 nwjs
。Rspack 会匹配 resolve.conditionNames
数组中列出的 export conditions。
注意,exports
对象中 key 的顺序决定了优先级。在条件匹配时,前面的入口优先级高于后面的入口。
例如:
导入时:
'foo'
会被解析为 'foo/index-require.js'
'foo/bar'
会被解析为 'foo/bar-node.js'
,因为在条件导出对象中 "node"
键优先于 "require"
键'foo/baz'
会被解析为 'foo/baz-node.js'
如果你希望在保留 Rspack 默认值的同时添加自定义的 condition names,可以使用 "..."
:
或者,如果你想让默认值优先,再追加自定义 condition names:
string[]
['package.json']
用于描述的 JSON 文件。
boolean
默认情况下,当 resolve.extensions 包含空字符串时,enforceExtension
会设置为 true
;否则,将设置为 false
。
如果是 true
,将不允许无扩展名文件。默认如果 ./foo
有 .js
扩展,require('./foo')
可以正常运行。但如果启用此选项,只有 require('./foo.js')
能够正常工作。
string[]
["exports"]
自定义 package.json 中的 exports 字段,例如:
则当配置为 ["testExports", "exports"]
时, import value from 'lib'
的结果为 lib/test.js
。
string[]
[".js", ".json", ".wasm"]
自动添加导入文件的扩展名。这意味着你可以导入文件,而不需要显式地写它们的扩展名。
例如,当导入 ./index
时,Rspack 将尝试按以下顺序解析:
./index.js
./index.json
./index.wasm
下面演示如何配置自定义扩展名来包含 TypeScript 和 JSX 文件:
当同一目录下存在同名但扩展名不同的多个文件时,Rspack 会选择在数组中位置更靠前的扩展名对应的文件进行解析。
例如,如果同一目录下同时存在 index.js
和 index.ts
,而你的配置是 ['.ts', '.js']
,那么 import './index'
将会解析为 index.ts
。
注意:显式配置 resolve.extensions
会完全覆盖默认数组,这意味着 Rspack 将不再尝试使用默认扩展名进行解析。
如果你希望在自定义扩展名的同时保留默认扩展名,可以使用展开语法 '...'
:
extensions
数组精简以提升解析性能。Record<string, string[] | string>
{}
定义拓展名的别名,例如:
这对于 TypeScript 项目来说非常有用,因为 TypeScript 推荐使用 .js
扩展名来引用 TypeScript 文件。
Rspack 在解析 import './foo.js'
时,会依次尝试解析 './foo.ts'
和 ./foo.js
。
Record<string, false | string>
{}
当常规解析失败时重定向模块请求。
Rspack 默认不会为 Node.js 核心模块提供 polyfills,这意味着如果你在浏览器或类似环境中运行的代码中使用它们,你将需要从 NPM 安装兼容的模块并自行包含它们。
你可以使用 node-polyfill-webpack-plugin 来自动 polyfill Node.js 核心模块。
或者参考 webpack 4 使用的 Node.js polyfills 列表:
string[]
['imports']
自定义 package.json 中的 imports 字段,用于提供包的内部请求(以 #
开头的请求被视为内部请求)
例如:
则当配置为 ["testImports", "imports"] 时, 当前包内 import value from '#foo'
的结果为 src/test/foo.js
。
string[]
控制用于定位包入口文件的 package.json 字段优先级。Rspack 在解析 npm 包入口时,会按该列表的顺序依次尝试这些字段。
当 target
配置为 'web'
, 'webworker'
, 或未指定时,默认值为 ["browser", "module", "main"]
。
对于任何其他 target
(包括 'node'
), 默认值为 ["module", "main"]
。
例如,对于一个名为 foo
的库,它的 package.json
包含以下字段:
当 import foo from 'foo'
时,Rspack 会解析到 browser
字段中的模块,因为 browser
字段在 mainFields
数组中优先级最高。
注意 exports
字段 的优先级高于 mainFields
。如果入口通过 exports
解析成功,Rspack 会忽略 browser
、module
和 main
字段。
例如,下面的 package.json 中,lib
会通过 exports
字段解析到 ./dist/index.mjs
,而 main
字段将被忽略。
string[]
["index"]
解析目录时的文件名后缀,例如 require('./dir/')
会尝试解析 './dir/index'
。
可以配置多个文件名后缀:
string[]
["node_modules"]
解析依赖时的目录名。
boolean
false
当开启时,require('file')
会首先寻找当前目录下的 ./file
文件,而不是 <modules>/file
。
boolean
false
在解析时,倾向使用与 resolve.roots
相关的绝对路径。
Rspack 中用来替代 tsconfig-paths-webpack-plugin 的配置。
string | object | undefined
undefined
string
这个选项接受的是 tsconfig.json
的文件路径。在开启这个选项后, Rspack 会基于 tsconfig.json
中 的 paths
和 baseUrl
来寻找模块,其功能等同于 tsconfig-paths-webpack-plugin。
string[] | "auto" | undefined
undefined
支持 tsconfig-paths-webpack-plugin 中定义的 tsconfig project references.
可以通过文件路径用于手动配置,或者使用 auto
用于自动读取 tsconfig.references
中的文件路径。
使用 undefined
将会关闭该功能。
boolean
false
不再解析扩展名,不再解析 package.json 中的 mainFiles(但不会影响来自 mainFiles, browser, alias 的请求)。
string[]
[]
限制请求解析路径的解析限制列表。
string[]
[]
一个目录列表,用于解析服务器相对 URL(以'/'开头的 URL)。默认使用 context 配置选项。在非 Windows 系统上,这些请求首先作为绝对路径进行解析。
boolean
true
是否将符号链接(symlink)解析到它们的符号链接位置(symlink location)。
启用时,符号链接的资源,将解析为其真实路径,而不是其符号链接的位置。注意,当使用创建符号链接包的工具(如 npm link
)时,这种方式可能会导致模块解析失败。
Record<string, Resolve>
.依据模块类型自定义 Resolve 配置。
boolean
!!process.versions.pnp
启用时,将使用 Yarn PnP 算法进行路径解析。
当 !!process.versions.pnp
为 true
时(即应用在 Yarn PnP 环境中运行时),它默认是启用的。