TypeScript练习场景下如何避免Node.js本地缓存@types等包?
可行解决方案
1. 单根工作区(Monorepo)模式
- 用npm/yarn/pnpm的工作区功能,将所有练习放在同一根项目下,仅在根目录安装一次核心依赖(TypeScript、esbuild、Obsidian API类型包等)
- 根目录
package.json配置示例:{ "private": true, "workspaces": ["./exercises/*"] } - 每个练习目录的
package.json仅保留专属脚本和配置,无需重复声明依赖,直接复用根目录安装的包
2. 全局依赖+项目链接
- 全局安装核心依赖:
npm install -g typescript esbuild @types/obsidian - 在每个练习目录执行链接命令,关联全局依赖以避免本地重复安装:
npm link typescript esbuild @types/obsidian - 同步配置
tsconfig.json指定全局类型路径:{ "compilerOptions": { "typeRoots": ["/usr/local/lib/node_modules/@types"] } }
3. 依赖共享缓存+全局esbuild调用
- 使用pnpm替代npm/yarn,它默认将依赖存储在全局共享缓存,所有项目自动复用,彻底避免重复下载
- 练习项目的
package.json脚本直接调用全局esbuild,无需本地安装:{ "scripts": { "build": "esbuild src/index.ts --bundle --outfile=main.js" } }
4. 统一配置复用
- 将
tsconfig.base.json、esbuild.config.mjs统一放在根目录,每个练习通过相对路径继承配置:
练习目录的tsconfig.json示例:{ "extends": "../tsconfig.base.json" } - 练习的构建脚本直接调用根目录的esbuild配置:
esbuild --config=../esbuild.config.mjs src/index.ts
5. 共享类型文件
- 把Obsidian API的类型文件单独提取到根目录的共享文件夹,每个练习的
tsconfig.json直接引用该路径:{ "compilerOptions": { "types": ["../shared-types/obsidian"] } }
内容的提问来源于stack exchange,提问作者cname
相关产品推荐
相关产品推荐

