# resolve-pkg-maps 中文文档

规范地址：https://npmcn.com/package/resolve-pkg-maps/

版本：1\.0\.0
npm 元数据更新时间：2022-12-14T15:37:46.383Z
中文译文更新时间：2026-11-05T15:09:08.371Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/resolve-pkg-maps
原文对照：https://npmcn.com/package/resolve-pkg-maps/?lang=original
项目主页：https://github.com/privatenumber/resolve-pkg-maps#readme
源码仓库：https://github.com/privatenumber/resolve-pkg-maps

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：15 kB，7 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2022-12-14T15:37:46.006Z
- 最新版本发布：2022-12-14T15:37:46.218Z
- 近 30 天下载量：398894423（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

解析 package.json 导出和导入地图

## 安装

```sh
npm install resolve-pkg-maps
```

也可以使用：`pnpm add resolve-pkg-maps`、`yarn add resolve-pkg-maps`、`bun add resolve-pkg-maps`

## README

# 分辨率pkg-映射

需要解决 `package.json` 子路径条件( c) [`exports`](https://nodejs.org/api/packages.html#exports)编号 :[`imports`](https://nodejs.org/api/packages.html#imports) 在解决者.

执行 [无害环境管理分辨率算法](https://nodejs.org/api/esm.html#resolver-algorithm-specification)测试 [对节点js](https://npmcn.com/tests/) 准确性.

支持这个项目,由 QQ 主演和分享. [跟我来](https://github.com/privatenumber) 看看我正在做哪些很酷的项目

## 使用量

### 解决 `exports`

_倾斜/包装.json_

```json5
{
    // ...
    "exports": {
        "./reverse": {
            "require": "./file.cjs",
            "default": "./file.mjs"
        }
    },
    // ...
}
```

```ts
import { resolveExports } from 'resolve-pkg-maps'

const [packageName, packageSubpath] = parseRequest('utils/reverse')

const resolvedPaths: string[] = resolveExports(
    getPackageJson(packageName).exports,
    packageSubpath,
    ['import', ...otherConditions]
)
// => ['./file.mjs']
```

### 解决 `imports`

_软件包.json_

```json5
{
    // ...
    "imports": {
        "#supports-color": {
            "node": "./index.js",
            "default": "./browser.js"
        }
    },
    // ...
}
```

```ts
import { resolveImports } from 'resolve-pkg-maps'

const resolvedPaths: string[] = resolveImports(
    getPackageJson('.').imports,
    '#supports-color',
    ['node', ...otherConditions]
)
// => ['./index.js']
```

## API 密码

### 出口(出口、请求、条件)

回返情况: `string[]`

决定 `request` 基于 `exports` 财务报告和审定财务报表 `conditions`返回一系列路径(例如,如果一个倒数组匹配的话).

#### 出口

类型 :

```ts
type Exports = PathOrMap | readonly PathOrMap[]

type PathOrMap = string | PathConditionsMap

type PathConditionsMap = {
    [condition: string]: PathConditions | null
}
```

这个 [`exports` 属性](https://nodejs.org/api/packages.html#exports) 数值在 `package.json`。 。 。 .

#### 请求

类型 : `string`

包子路径解决。 假设正则路径通过(例如:. [重复鞭打 `//`](https://github.com/nodejs/node/issues/44316)) (中文(简体) ).

这个 _不应该_ 开始 `/` 或者说 `./`。 。 。 .

示例:如果完整的导入路径是 `some-package/subpath/file`,请求是 `subpath/file`。 。 。 .

#### 条件

类型 : `readonly string[]`

解决请求时使用的一系列条件 。 作为参考,Node.js的默认条件是 [`['node', 'import']`](https://nodejs.org/api/esm.html#:~:text=defaultConditions%20is%20the%20conditional%20environment%20name%20array%2C%20%5B%22node%22%2C%20%22import%22%5D.)。 。 。 .

此数组的顺序无关紧要; 导出图中的条件密钥的顺序才是最重要的.

不需要满足阵列中的所有条件来解决请求. 它只需要足够决心走上一条道路.

* * *

### 解决进口(进口、请求、条件)

回返情况: `string[]`

决定 `request` 基于 `imports` 财务报告和审定财务报表 `conditions`返回一系列路径(例如,如果一个倒数组匹配的话).

#### 进口

类型 :

```ts
type Imports = {
    [condition: string]: PathOrMap | readonly PathOrMap[] | null
}

type PathOrMap = string | Imports
```

这个 [`imports` 属性](https://nodejs.org/api/packages.html#imports) 数值在 `package.json`。 。 。 .

#### 请求

类型 : `string`

请求解决。 假设正则路径通过(例如:. [重复鞭打 `//`](https://github.com/nodejs/node/issues/44316)) (中文(简体) ).

> **说明:** 在Node.js中,进口分辨率仅限于前缀的请求 `#`然而,如果您想要为非前缀条目添加自定义支持,此软件包不执行此要求.

#### 条件

类型 : `readonly string[]`

解决请求时使用的一系列条件 。 作为参考,Node.js的默认条件是 [`['node', 'import']`](https://nodejs.org/api/esm.html#:~:text=defaultConditions%20is%20the%20conditional%20environment%20name%20array%2C%20%5B%22node%22%2C%20%22import%22%5D.)。 。 。 .

此数组的顺序无关紧要; 导入地图中的条件密钥的顺序才是关键 .

不需要满足阵列中的所有条件来解决请求. 它只需要足够决心走上一条道路.

* * *

### 错误

#### `ERR_PACKAGE_PATH_NOT_EXPORTED`

-   如果请求没有被导出地图导出

#### `ERR_PACKAGE_IMPORT_NOT_DEFINED`

-   如果导入地图未定义请求

#### `ERR_INVALID_PACKAGE_CONFIG`

-   如果对象包含既是路径又是条件的属性(例如,从开始到不开始) `.`(中文(简体) )
-   如果对象含有数字属性

#### `ERR_INVALID_PACKAGE_TARGET`

-   如果解析出导出路径不是有效路径( 如不相对或协议)
-   如果解决路径包含 `..` 或者说 `node_modules`
-   如果解析路径是无法解析的类型

## 财务问题

### 为什么APIs返回一系列路径?

`exports`编号 :`imports` 支持通过 a [后退数组](https://github.com/jkrems/proposal-pkg-exports/#:~:text=Whenever%20there%20is,to%20new%20cases.) 如果上一条路径无效, 则提供倒车路径 :

```json5
{
    "exports": {
        "./feature": [
            "./file.js",
            "./fallback.js"
        ]
    }
}
```

节点.js的执行 [选择第一个有效的路径( 不尝试解决它)](https://github.com/nodejs/node/issues/44282#issuecomment-1220151715) 如果无法解决,则丢出一个错误。 节点后退阵列是为 [与特性的转发兼容性](https://github.com/jkrems/proposal-pkg-exports/#:~:text=providing%20forwards%20compatiblitiy%20for%20new%20features) (例如协议)可立即得到验证/费用高昂:

```json5
{
    "exports": {
        "./core-polyfill": ["std:core-module", "./core-polyfill.js"]
    }
}
```

不过, [网络软件包](https://webpack.js.org/guides/package-exports/#alternatives) 财务报告和审定财务报表 [类型脚本](https://github.com/microsoft/TypeScript/blob/71e852922888337ef51a0e48416034a94a6c34d9/src/compiler/moduleSpecifiers.ts#L695) 已经偏离了这种行为,并试图在一条路径无法解决的情况下解决下一条路径.

通过返回一系列匹配路径,而不是仅仅第一个路径,用户可以决定采用哪种行为.

### 如何是区别于 [`resolve.exports`](https://github.com/lukeed/resolve.exports)? 吗?

`resolve.exports` 仅解析 `exports`,而这个软件包既解决了 `exports` 打开 `imports`。这一比较将仅涵盖 `exports`。 。 。 .

-   虽有名相, `resolve.exports` 处理不止一个 `exports`它需要整个 `package.json` 处理解析对象 `.` 财务报告和审定财务报表 [自引用](https://nodejs.org/api/packages.html#self-referencing-a-package-using-its-name)此软件包只接受 `exports`编号 :`imports` 地图来自 `package.json` 并且只能解决地图上定义的问题.
    
-   `resolve.exports` 接受全部请求(例如:. `foo/bar`),而这个包只接受所请求的子路径(例如. `bar`) (中文(简体) ).
    
-   `resolve.exports` 只返回倒置数组的第一个结果。 此软件包返回一系列结果, 供用户决定如何处理 .
    
-   `resolve.exports` 支持 [子路径文件夹映射](https://nodejs.org/docs/latest-v16.x/api/packages.html#subpath-folder-mappings) (在Node.js v16和去除在v17)但似乎 [有个错误](https://github.com/lukeed/resolve.exports/issues/7)。这个软件包不支持子路径文件夹映射,因为Node.js已经将其删除,有利于使用子路径模式.
    
-   解析器都没有依赖文件系统
    

此软件包还涉及许多错误 `resolve.exports`,显示于 [此测试](https://npmcn.com/tests/exports/compare-resolve.exports.ts)。 。 。 .

## 常见问题

### resolve-pkg-maps 是什么？

解析 package\.json 导出和导入地图

### 如何安装 resolve-pkg-maps？

在项目目录运行 npm install resolve-pkg-maps，或使用 pnpm add / yarn add / bun add。

### resolve-pkg-maps 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### resolve-pkg-maps 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### resolve-pkg-maps 可以商用吗？

resolve-pkg-maps 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### resolve-pkg-maps 的下载量有多少？

根据 npm 官方下载统计，resolve-pkg-maps 在 2026/10/05 – 2026/11/03 这 30 天内被下载 398,894,423 次，日均约 13,296,481 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### resolve-pkg-maps 还在维护吗？

最新版本 1\.0\.0 发布于 2022/12/14（3 年前）；至今共发布 1 个版本，其中过去 12 个月发布了 0 个；首次发布于 2022/12/14。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

