如何正确配置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命令即可
- 命名导入(推荐,无需改动A的源码):
4. 重新链接依赖验证
回到projectB目录,先执行npm install重新链接本地的project_a依赖,再执行./node_modules/.bin/tsc就不会出现模块找不到的报错了。
补充:如果需要频繁修改项目A的代码,可以在projectA目录执行
tsc -w开启监听模式,代码改动后会自动增量编译到build目录,无需每次手动执行build命令。
内容的提问来源于stack exchange,提问作者birgersp
相关产品推荐
相关产品推荐

