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

Node.js npm包导入时如何省略dist目录直接引入子模块?

解决方案

方案1:使用package.json的exports字段(推荐,Node.js 12.7.0+ 支持)

这是Node.js官方标准的子路径映射方案,直接修改你的package.json即可:

{
  "name": "my-lib",
  "version": "1.0.0",
  "description": "",
  "main": "dist/index.js",
  "exports": {
    ".": "./dist/index.js",
    "./foo": "./dist/foo.js",
    // 如果有大量子模块,可直接用通配符匹配所有子路径
    "./*": "./dist/*"
  }
}

配置完成后,使用者就可以直接通过import foo from 'my-lib/foo'引入对应模块,无需显式写dist路径。

如果你的库同时提供TypeScript类型定义,还需要补充类型映射配置,兼容TypeScript的路径解析:

  • TypeScript 4.5+ 可以直接在exports中声明类型路径:
"exports": {
  ".": {
    "types": "./dist/index.d.ts",
    "default": "./dist/index.js"
  },
  "./foo": {
    "types": "./dist/foo.d.ts",
    "default": "./dist/foo.js"
  },
  "./*": {
    "types": "./dist/*.d.ts",
    "default": "./dist/*.js"
  }
}
  • 兼容更低版本TypeScript可额外加typesVersions配置:
"typesVersions": {
  "*": {
    "*": ["./dist/*"]
  }
}

方案2:兼容旧版本Node.js(12以下)

如果你的库需要支持Node.js 12以下不支持exports字段的环境,可选以下两种方式:

  • 在项目根目录创建和子模块同名的占位文件,比如创建foo.js,内容为:
    module.exports = require('./dist/foo.js')
    
    对应的类型文件foo.d.ts内容为:
    export * from './dist/foo'
    
    该方式适合子模块数量较少的场景。
  • 调整编译配置,直接把打包后的js文件输出到项目根目录而非dist文件夹,该方案会导致根目录文件混乱,不推荐。

注意事项

  • 发布npm包前要确认dist文件夹被包含在发布内容中,可在package.json的files字段显式声明:
    "files": ["dist/"]
    
  • 配置完成后可以通过npm link在本地测试引入效果,确认路径映射生效。

内容的提问来源于stack exchange,提问作者Pavan Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:00:04