如何配置package.json省略导入路径中的dist目录实现子路径导出
无中心入口npm包省略导入路径dist层级的规范实现
最符合Node.js与前端生态规范的方案是使用package.json的exports字段做子路径映射,该配置是Node.js模块规范明确定义的标准能力,不属于非标准hack,不需要修改现有构建输出结构,所有现代Node.js版本(12.0+)、主流打包工具(Vite、Webpack、Rollup、esbuild等)均原生支持。
具体配置方式
在你的包根目录的package.json中添加exports字段,显式声明每个对外暴露的子路径对应的实际构建产物位置:
{ "name": "my-package", "exports": { "./api-one": "./dist/api-one/index.js", "./api-two": "./dist/api-two/index.js" } }
如果你的API子路径数量较多,不需要逐一枚举,可以直接使用通配符做批量映射:
{ "exports": { "./api-*": "./dist/api-*/index.js" } }
配置完成后,消费端可以直接按如下方式导入,不需要携带dist层级:
import { SomeFeatureOfApiOne } from 'my-package/api-one'
额外说明:exports字段默认会屏蔽所有未显式声明的包内路径访问,刚好匹配你只暴露指定API入口、不对外暴露内部构建结构的需求,比传统的目录暴露方式更安全。
TypeScript 兼容配置
如果你的库提供TypeScript类型声明,需要额外补充typesVersions字段,保证TS编译器可以正确定位到对应子路径的类型文件:
{ "typesVersions": { "*": { "api-*": ["./dist/api-*/index.d.ts"] } } }
不推荐的方案说明
- 不要使用
postinstall脚本移动构建产物:该方案在不同包管理器的软链模式、严格依赖隔离策略下会出现路径错误、权限异常等问题,可维护性极差。 - 不要将构建产物直接输出到包根目录:会导致构建产物、源码、配置文件混杂,大幅提升后续维护成本。
- 不要依赖消费端的构建别名配置:作为库作者无法强制所有使用方添加对应别名规则,通用性完全没有保障。
内容的提问来源于stack exchange,提问作者Sasha
相关产品推荐
相关产品推荐

