版本号 / 包与依赖

package.json 条件导出可视化

粘贴完整清单,选择入口和条件,查看哪个分支先命中。

package.json 条件导出

package.json 输入

清单只在当前浏览器处理;不查询 npm,也不上传文件。

解析结果

输入 package.json 清单后开始。

解析选项

用空格或逗号分隔。浏览器与打包器结果仅是自选条件预览。

输入或选项已变化;重新解析后才能导出。

同一包在 import 下正常、require 下却报错时,package.json 条件导出的键顺序往往比条件列表更关键。先看实际命中的分支,再修改发布配置。

此处按一个入口追踪 exports 字段;输入 # 别名则切到包导入映射。解析结果只解释配置,无法证明目标文件已经发布。

为什么要看 package.json 条件导出分支?

找出先命中的条件

条件对象按 JSON 中的键顺序测试,不按勾选顺序测试。分支图标出跳过项和最终目标;把 default 放得太早会遮住后面的 import。

一份清单分为多条有顺序的条件路径,第一条命中路径高亮。

区分公开入口与内部别名

package.json 条件导出控制 . 和 ./feature 等公开路径;imports 中的 #config 只供包内使用。null 则是明确禁止访问,不应误报为文件丢失。

同一清单分出公开入口和包内井号别名,并显示被封锁的路径。

按一次请求追踪真实的分支顺序

01

输入包名或井号别名

包名加 /feature 会依据 name 转成 ./feature;#config 会切换到 imports,仅能用于包内。

02

切换条件上下文

默认 Node.js + import。可改为 require 或加自选条件。自动解析等待 350 毫秒;关闭后可用按钮或 Ctrl/Cmd + Enter。

03

先读分支再导出

对照命中的键、条件顺序与目标。路径诊断只检查语法;修改任何选项后,旧报告的复制和下载立即禁用。

逐层查看入口如何匹配

精确键与星号模式

根入口、精确子路径和 * 模式均可测试。精确键优先,较具体的模式先于宽泛模式;null 可封锁私有子路径。 子路径导出会显示命中的映射键。

两种 Node 调用方式

比较 import 和 require 的内建条件。附加 browser、types 或 development 时只预览条件集合,不模拟整个工具链。

本地路径诊断

exports 字段的本地目标必须以 ./ 起始,不能上跳或进入 node_modules;包导入允许指向外部包。工具不会执行代码。

映射结果能说明到哪里

不能验证文件存在
映射只选出目标字符串。单靠清单无法知道文件是否存在、被打进发布包,或运行时能否加载。
自选条件不是兼容性测试
browser 和 types 不属于这里的 Node 默认条件。Vite、webpack 和 TypeScript 还有字段、扩展名与类型声明规则;这里仅提供条件预览。
# 别名不是公开入口
imports 中的 # 路径只供同一个包的代码使用,即使目标是外部包,也不能让其他包直接导入这个别名。
不查询仓库或注册表
不从 npm 取包、不扫描文件夹、不运行脚本,也不生成映射或声称覆盖所有 Node 版本。

package.json 条件导出常见问题

exports 的条件匹配顺序重要吗?

重要。对象键按写入顺序检查,首个可用目标胜出。default 如果排得太早,可能遮住 import 或 require;这里保留原顺序显示。

为什么要把 require 和 import 放在点号下面?

点号代表包根入口;加入 ./feature 等子路径时,需要把根入口和其他入口放在同一个映射里。纯根入口也可用简写。

未写在 exports 的子路径为什么无法导入?

声明 exports 后,对外开放的是列出的子路径及匹配模式。输入包名或 ./子路径查看匹配情况;null 是有意封锁。

通配符子路径会匹配哪些入口?

例如 ./features/* 取请求中的后缀,再替换目标里的 *。精确键先于模式,较具体模式先于宽泛模式。

imports 字段的井号别名如何解析?

输入 # 开头的别名即可测试 imports。它仅限当前包内部,目标可以是另一个包;这里不继续解析那个依赖。

如何确认条件指向的文件确实存在?

仅凭 package.json 无法确认。这里验证路径语法;要核对存在性和发布文件,还需要检查实际文件树或包产物。

还有没解释清楚的映射?

现在测试 package.json 条件导出

用 package.json 条件导出可视化比较同一入口的 import 与 require 分支,再把解析报告交给同事复核。