分辨率pkg-映射
需要解决 package.json 子路径条件( c) exports编号 :imports 在解决者.
执行 无害环境管理分辨率算法测试 对节点js 准确性.
支持这个项目,由 QQ 主演和分享. 跟我来 看看我正在做哪些很酷的项目
使用量
解决 exports
倾斜/包装.json
{
// ...
"exports": {
"./reverse": {
"require": "./file.cjs",
"default": "./file.mjs"
}
},
// ...
}
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
{
// ...
"imports": {
"#supports-color": {
"node": "./index.js",
"default": "./browser.js"
}
},
// ...
}
import { resolveImports } from 'resolve-pkg-maps'
const resolvedPaths: string[] = resolveImports(
getPackageJson('.').imports,
'#supports-color',
['node', ...otherConditions]
)
// => ['./index.js']
API 密码
出口(出口、请求、条件)
回返情况: string[]
决定 request 基于 exports 财务报告和审定财务报表 conditions返回一系列路径(例如,如果一个倒数组匹配的话).
出口
类型 :
type Exports = PathOrMap | readonly PathOrMap[]
type PathOrMap = string | PathConditionsMap
type PathConditionsMap = {
[condition: string]: PathConditions | null
}
这个 exports 属性 数值在 package.json。 。 。 .
请求
类型 : string
包子路径解决。 假设正则路径通过(例如:. 重复鞭打 //) (中文(简体) ).
这个 不应该 开始 / 或者说 ./。 。 。 .
示例:如果完整的导入路径是 some-package/subpath/file,请求是 subpath/file。 。 。 .
条件
类型 : readonly string[]
解决请求时使用的一系列条件 。 作为参考,Node.js的默认条件是 ['node', 'import']。 。 。 .
此数组的顺序无关紧要; 导出图中的条件密钥的顺序才是最重要的.
不需要满足阵列中的所有条件来解决请求. 它只需要足够决心走上一条道路.
解决进口(进口、请求、条件)
回返情况: string[]
决定 request 基于 imports 财务报告和审定财务报表 conditions返回一系列路径(例如,如果一个倒数组匹配的话).
进口
类型 :
type Imports = {
[condition: string]: PathOrMap | readonly PathOrMap[] | null
}
type PathOrMap = string | Imports
这个 imports 属性 数值在 package.json。 。 。 .
请求
类型 : string
请求解决。 假设正则路径通过(例如:. 重复鞭打 //) (中文(简体) ).
说明: 在Node.js中,进口分辨率仅限于前缀的请求
#然而,如果您想要为非前缀条目添加自定义支持,此软件包不执行此要求.
条件
类型 : readonly string[]
解决请求时使用的一系列条件 。 作为参考,Node.js的默认条件是 ['node', 'import']。 。 。 .
此数组的顺序无关紧要; 导入地图中的条件密钥的顺序才是关键 .
不需要满足阵列中的所有条件来解决请求. 它只需要足够决心走上一条道路.
错误
ERR_PACKAGE_PATH_NOT_EXPORTED
- 如果请求没有被导出地图导出
ERR_PACKAGE_IMPORT_NOT_DEFINED
- 如果导入地图未定义请求
ERR_INVALID_PACKAGE_CONFIG
- 如果对象包含既是路径又是条件的属性(例如,从开始到不开始)
.(中文(简体) ) - 如果对象含有数字属性
ERR_INVALID_PACKAGE_TARGET
- 如果解析出导出路径不是有效路径( 如不相对或协议)
- 如果解决路径包含
..或者说node_modules - 如果解析路径是无法解析的类型
财务问题
为什么APIs返回一系列路径?
exports编号 :imports 支持通过 a 后退数组 如果上一条路径无效, 则提供倒车路径 :
{
"exports": {
"./feature": [
"./file.js",
"./fallback.js"
]
}
}
节点.js的执行 选择第一个有效的路径( 不尝试解决它) 如果无法解决,则丢出一个错误。 节点后退阵列是为 与特性的转发兼容性 (例如协议)可立即得到验证/费用高昂:
{
"exports": {
"./core-polyfill": ["std:core-module", "./core-polyfill.js"]
}
}
不过, 网络软件包 财务报告和审定财务报表 类型脚本 已经偏离了这种行为,并试图在一条路径无法解决的情况下解决下一条路径.
通过返回一系列匹配路径,而不是仅仅第一个路径,用户可以决定采用哪种行为.
如何是区别于 resolve.exports? 吗?
resolve.exports 仅解析 exports,而这个软件包既解决了 exports 打开 imports。这一比较将仅涵盖 exports。 。 。 .
-
虽有名相,
resolve.exports处理不止一个exports它需要整个package.json处理解析对象.财务报告和审定财务报表 自引用此软件包只接受exports编号 :imports地图来自package.json并且只能解决地图上定义的问题. -
resolve.exports接受全部请求(例如:.foo/bar),而这个包只接受所请求的子路径(例如.bar) (中文(简体) ). -
resolve.exports只返回倒置数组的第一个结果。 此软件包返回一系列结果, 供用户决定如何处理 . -
resolve.exports支持 子路径文件夹映射 (在Node.js v16和去除在v17)但似乎 有个错误。这个软件包不支持子路径文件夹映射,因为Node.js已经将其删除,有利于使用子路径模式. -
解析器都没有依赖文件系统
此软件包还涉及许多错误 resolve.exports,显示于 此测试。 。 。 .