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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:52:08