You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:45:36