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

如何正确配置TypeScript项目实现跨项目本地依赖共享

解决方案

报错核心原因是项目A没有正确配置TypeScript包的入口、类型声明、子路径导出规则,且未提前编译输出产物,TS无法在依赖目录下找到可识别的JS文件与类型声明。按以下步骤修改项目A配置即可:


1. 修正项目A的package.json配置

修改projectA/package.json,补全正确的入口路径、类型声明路径、子路径导出规则,同时添加编译脚本:

{
  "name": "project_a",
  "version": "1.0.0",
  "main": "./build/main.js",
  "types": "./build/main.d.ts",
  "exports": {
    "./main": {
      "types": "./build/main.d.ts",
      "default": "./build/main.js"
    }
  },
  "scripts": {
    "build": "tsc"
  },
  "devDependencies": {
    "typescript": "^4.7.4"
  }
}

注意:原配置中main字段指向不存在的index.js,和实际源码入口src/main.ts完全不匹配,是核心错误点之一。

2. 调整项目A的tsconfig.json配置

打开projectA/tsconfig.json,开启类型声明文件自动生成能力:

{
  "compilerOptions": {
    "target": "es2022",
    "module": "commonjs",
    "outDir": "./build",
    "esModuleInterop": true,
    "strict": true,
    "skipLibCheck": true,
    "moduleResolution": "node",
    "declaration": true
  }
}

新增的"declaration": true配置会让TS编译时自动生成.d.ts类型声明文件,供项目B做类型校验使用。

3. 编译项目A,修正导入写法

  • 进入projectA目录,执行npm run build,编译完成后build目录下会生成main.js和对应的main.d.ts文件
  • 修正项目B的导入语句:原代码用默认导入写法,但projectA中projectAHello是命名导出,两种改法二选一:
    • 命名导入(推荐,无需改动A的源码):
      // projectB/src/main.ts
      import { projectAHello } from "project_a/main"
      projectAHello()
      
    • 如果要保留默认导入写法,修改projectA的src/main.ts导出为export default function projectAHello() {...},重新执行A的build命令即可

4. 重新链接依赖验证

回到projectB目录,先执行npm install重新链接本地的project_a依赖,再执行./node_modules/.bin/tsc就不会出现模块找不到的报错了。


补充:如果需要频繁修改项目A的代码,可以在projectA目录执行tsc -w开启监听模式,代码改动后会自动增量编译到build目录,无需每次手动执行build命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:06:27