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

使用npm workspaces如何跳过src目录导入共享包的TS文件

解决TypeScript Monorepo中跳过src目录导入的问题

针对你用npm workspaces搭建的TypeScript monorepo,要实现跳过@package/shared的src目录直接导入,需要精准配置package.json的exports字段和TypeScript的typesVersions,以下是可行方案:

1. 配置@package/shared的package.json

在packages/shared/package.json中添加如下配置,覆盖默认的文件解析规则:

{
  "name": "@package/shared",
  "type": "module",
  "exports": {
    ".": "./src/index.ts",
    "./*": "./src/*/index.ts",
    "./*/*": "./src/*/*.ts"
  },
  "typesVersions": {
    "*": {
      "*": ["src/*"],
      "*/*": ["src/*/*"]
    }
  }
}

配置说明:

  • ".": 匹配根导入@package/shared,直接指向src/index.ts
  • "./*": 匹配一级子路径(如@package/shared/types),指向对应目录下的index.ts
  • "./*/*": 匹配二级文件路径(如@package/shared/types/foo-type),直接指向src下的对应ts文件
  • typesVersions: 告诉TypeScript如何映射类型路径,确保类型检查和编辑器提示正常工作

2. 确认TypeScript配置

确保你的monorepo根目录或@package/shared的tsconfig.json中开启正确的模块解析规则:

{
  "compilerOptions": {
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "declaration": true,
    "rootDir": "./src",
    "outDir": "./dist"
  },
  "include": ["src/**/*"]
}

验证效果

配置完成后,你期望的导入方式都能正常生效:

// 正常生效
import { ... } from "@package/shared"
import { ... } from "@package/shared/types"
import { ... } from "@package/shared/types/foo-type"
import { ... } from "@package/shared/constants"
import { ... } from "@package/shared/constants/foo-const"

// 会报错(符合预期,无对应导出规则)
import { ... } from "@package/src/shared/..."

为什么之前的通配符无效?

你之前尝试的"./*": "./src/*"只能匹配一级路径(如types),无法覆盖二级文件路径(如types/foo-type);而"./": "./src/*.ts"的写法不符合Node.js导出规则,自然无法生效。必须明确配置多级通配符,同时搭配typesVersions处理TypeScript的类型解析逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:50:35