CC 4.0 许可证
本节内容来源于以下链接,并受 CC BY 4.0 许可证保护。
除非另有说明,以下内容可被认为是基于原始内容的修改和删除的结果。
解析
用于配置 Rspack 模块解析逻辑。
resolve.alias
- 类型:
Record<string, false | string | (string | false)[]>
- 默认值:
{}
路径别名,例如:
{ "@": path.resolve(__dirname, './src'), "abc$": path.resolve(__dirname, './node_modules/abc/index.js'), }
此时
require("@/a") 将尝试解析 <root>/src/a。
require("abc") 将尝试解析 <root>/src/abc。
require("abc/file.js") 将不会匹配,并且它将尝试解析 node_modules/abc/file.js。
resolve.aliasFields
- 类型:
string[]
- 默认值:
['browser']
定义一个字段,例如 browser,它应该根据 此规范 进行解析。
resolve.conditionNames
与 node 的 conditionNames 相同,用于 package.json 中的 exports 和 imports 字段。
resolve.descriptionFiles
- 类型:
string[]
- 默认值:
['package.json']
用于描述的 JSON 文件。
rspack.config.js
module.exports = {
resolve: {
descriptionFiles: ['package.json'],
},
};
resolve.enforceExtension
默认情况下,如果 resolve.extensions 包含空字符串,则它将更改为 true;否则,此值将更改为 false。
如果为 true,则不允许使用无扩展名的文件。因此,默认情况下 require('./foo') 如果 ./foo 具有 .js 扩展名,则可以正常工作,但如果启用了此选项,则只有 require('./foo.js') 才可以正常工作。
rspack.config.js
module.exports = {
resolve: {
enforceExtension: false,
},
};
resolve.extensions
- 类型:
string[]
- 默认值:
[".js", ".json", ".wasm"]
按顺序解析模块,例如 require('. /index'),将尝试解析 '. /index.js'、'. /index.json'...
resolve.extensionAlias
- 类型:
Record<string, string[] | string>
- 默认值:
{}
定义扩展名的别名。例如:
rspack.config.js
module.exports = {
resolve: {
extensionAlias: {
'.js': ['.ts', '.js'],
},
},
};
这对 TypeScript 项目特别有用,因为 TypeScript 建议使用 .js 扩展名引用 TypeScript 文件。
index.ts
import { foo } from './foo.js'; // actually refers to `foo.ts`
Rspack 在解析 import './foo.js' 时,将依次尝试解析 './foo.ts' 和 ./foo.js'。
resolve.fallback
- 类型:
Record<string, false | string>
- 默认值:
{}
当正常解析失败时,重定向模块请求。
rspack.config.js
module.exports = {
//...
resolve: {
fallback: {
abc: false, // do not include a polyfill for abc
xyz: path.resolve(__dirname, 'path/to/file.js'), // include a polyfill for xyz
},
},
};
Rspack 不会自动填充 Node.js 核心模块,这意味着如果您在浏览器或类似环境中运行的代码中使用它们,则必须从 NPM 安装兼容的模块并自行包含它们。
您可以使用 node-polyfill-webpack-plugin 自动填充 Node.js 核心 API。
rspack.config.js
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin');
module.exports = {
// ...
plugins: [new NodePolyfillPlugin()],
};
或者参考 webpack 4 使用的 Node.js 填充列表
rspack.config.js
module.exports = {
//...
resolve: {
fallback: {
assert: require.resolve('assert'),
buffer: require.resolve('buffer'),
console: require.resolve('console-browserify'),
constants: require.resolve('constants-browserify'),
crypto: require.resolve('crypto-browserify'),
domain: require.resolve('domain-browser'),
events: require.resolve('events'),
http: require.resolve('stream-http'),
https: require.resolve('https-browserify'),
os: require.resolve('os-browserify/browser'),
path: require.resolve('path-browserify'),
punycode: require.resolve('punycode'),
process: require.resolve('process/browser'),
querystring: require.resolve('querystring-es3'),
stream: require.resolve('stream-browserify'),
string_decoder: require.resolve('string_decoder'),
sys: require.resolve('util'),
timers: require.resolve('timers-browserify'),
tty: require.resolve('tty-browserify'),
url: require.resolve('url'),
util: require.resolve('util'),
vm: require.resolve('vm-browserify'),
zlib: require.resolve('browserify-zlib'),
},
},
};
resolve.importsFields
- 类型:
string[]
- 默认值:
["imports"]
自定义 package.json 中的 imports 字段,用于提供包的内部请求(以 # 开头的请求被视为内部请求)。
例如:
// package.json { "name": "lib", "imports": { "#foo": "./src/foo.js", "#common/*": "./src/common/*.js" } "testImports": { "#foo": "./src/test/foo.js", } }
当此配置为 ["testImports", "imports"] 时,当前包中 import value from '#foo' 的结果为 src/test/foo.js。
resolve.mainFields
- 类型:
string[]
- 默认值
target 为 ["browser", "module", "main"] 当它是 web 时
["module", "main"] 用于其他情况
尝试解析 package.json 中的字段,例如:
// package.json
{
"name": "lib",
"module": "es/index.js"
}
那么 import value from 'lib' 将解析为 lib/es/index.js。
resolve.mainFiles
- 类型:
string[]
- 默认值:
["index"]
解析目录时的文件名后缀,例如 require('. /dir/') 将尝试解析 '. /dir/index'。
resolve.exportsFields
- 类型:
string[]
- 默认值:
["exports"]
自定义 package.json 中的 exports 字段。例如:
// lib/package.json
{
"name": "lib",
"testExports": {
".": "./test.js"
},
"exports": {
".": "./index.js"
}
}
当此配置为 ["testExports", "exports"] 时,import value from 'lib' 的结果为 lib/test.js。
resolve.modules
- 类型:
string[]
- 默认值:
["node_modules"]
解析依赖项时使用的目录名称。
resolve.preferRelative
启用后,require('file') 将首先在当前目录中查找 . /file 文件,而不是 <modules>/file。
resolve.preferAbsolute
在解析时选择相对于 resolve.roots 的绝对路径。
resolve.tsConfig
- 类型:
string | object | undefined
- 默认值:
undefined
在 Rspack 中替换 tsconfig-paths-webpack-plugin。
rspack.config.js
module.exports = {
resolve: {
// string
tsConfig: path.resolve(__dirname, './tsconfig.json'),
// or object
tsConfig: {
configFile: path.resolve(__dirname, './tsconfig.json'),
references: 'auto',
},
},
};
点击查看示例.
resolve.tsConfig.configFile
如果您通过选项传递 tsconfig.json 的路径,Rspack 将尝试根据 tsconfig.json 的 paths 和 baseUrl 来解析模块,功能等同于 tsconfig-paths-webpack-plugin。
resolve.tsConfig.references
- 类型:
string[] | "auto" | undefined
- 默认值:
undefined
支持 tsconfig 项目引用,如 tsconfig-paths-webpack-plugin 中定义的那样。
可以手动提供 tsconfig 路径列表,或者指定 auto 从 tsconfig.references 自动读取路径列表。
当值为 undefined 时,此功能被禁用。
resolve.fullySpecified
不再解析扩展名,不再解析 package.json 中的 mainFiles(但不影响来自 mainFiles、browser、alias 的请求)。
resolve.restrictions
一个 resolve 限制列表,用于限制请求可以在哪些路径上解析。
resolve.roots
一个目录列表,用于解析与服务器相关的 URL(以 '/' 开头)。它默认为 context 配置选项。在 Windows 以外的系统上,这些请求最初被解析为绝对路径。
resolve.symlinks
是否将符号链接解析到其符号链接的位置。
启用后,符号链接的资源将解析到其真实路径,而不是其符号链接的位置。请注意,当使用符号链接包的工具(如 npm link)时,这可能会导致模块解析失败。
resolve.byDependency
- 类型:
Record<string, Resolve>。
根据模块类型自定义 Resolve 配置。