> For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt.

# 模块解析

模块解析指的是将模块标识符转换为模块的文件路径的过程。

Rspack 使用 [rspack-resolver](https://github.com/rstackjs/rspack-resolver) 来进行模块路径解析，它是对 [Node.js 模块解析算法](https://nodejs.org/api/esm.html#resolution-algorithm-specification) 的一个扩展，其接口和 [enhanced-resolve](https://github.com/webpack/enhanced-resolve) 保持一致。

参考 [resolve 配置](/zh/config/resolve.md) 了解更多关于模块解析的配置。

## Rspack 中的解析规则

Rspack 支持如下三种文件路径：

### 绝对路径

```js
import '/home/me/file';
```

因为该路径已经是绝对路径，因此一般不需要再做进一步解析，直接返回该路径即可。

### 相对路径

```js
import './src/answer';
```

在这种情况下，使用 import 和 require 的资源文件所处的目录，被认为是上下文目录。在 import/require 中给定的相对路径，会拼上该上下文目录路径，来生成模块的绝对路径。

### 模块路径

```js
import 'lodash';
```

模块路径指那些没有以 `'./'`、`'../'`、`'/'` 开头的路径。在这种情况下，Rspack 会根据模块解析规则，来解析模块的绝对路径。[node 模块解析算法](https://nodejs.org/api/modules.html#modules_all_together)有关于解析模块规则的详细说明。

## package.json `imports`

Rspack 的解析器支持 `package.json` 的 [imports](https://nodejs.org/api/packages.html#subpath-imports) 字段，用于解析包内以 `#` 开头的模块标识符。

比如下面的例子，`#utils` 和 `#/main` 都会从当前包的 `imports` 字段中解析：

```json title="package.json"
{
  "imports": {
    "#utils": "./src/utils/index.js",
    "#/*": "./src/*"
  }
}
```

```js title="src/index.js"
import utils from '#utils'; // 解析为 ./src/utils/index.js
import main from '#/main.ts'; // 解析为 ./src/main.ts
```

> 使用 [`resolve.importsFields`](/zh/config/resolve.md#resolveimportsfields) 选项可以自定义 `imports` 字段的名称。
