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

从Git安装npm依赖包时如何在npm install阶段自动编译TypeScript代码

问题根因

NestJS 默认的 TypeScript 编译逻辑仅会处理项目根目录src下的业务代码,即便你在tsconfig的include中添加了node_modules下的依赖路径,@nestjs/cli的内置构建规则也会跳过node_modules目录下的文件编译,因此无法识别未编译的纯TS依赖包。而Angular CLI的构建逻辑会自动处理node_modules中的TS类型文件,因此不会报错。

解决方案

方案1:改造公共类型包(最优方案,一劳永逸)

直接在你的myproject-types公共包中添加自动编译逻辑,安装时自动生成JS文件和类型声明,步骤如下:

  1. 在公共包的根目录添加tsconfig.json,示例配置:
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2017",
    "declaration": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src/**/*.ts"],
  "exclude": ["node_modules"]
}
  1. 修改公共包的package.json,添加构建脚本和入口配置:
{
  "name": "myproject-types",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "scripts": {
    "build": "tsc",
    "prepare": "npm run build"
  }
}

说明:prepare是npm的官方生命周期钩子,当你通过git地址安装该依赖时,npm会自动执行该钩子完成编译,直接在node_modules的包目录下生成dist文件夹和对应的JS、d.ts文件。

  1. 建议在公共包的src/index.ts中统一导出所有类型/枚举,后续业务项目引用时直接写import { SessionEventEnum } from 'myproject-types'即可,不需要写内部路径避免报错。

方案2:不修改公共包,改造NestJS项目配置(临时兼容方案)

如果暂时无法修改公共类型包,可以在NestJS项目中添加 postinstall 钩子,安装依赖后自动编译该包:

  1. 修改NestJS项目的package.json,添加脚本:
{
  "scripts": {
    "postinstall": "cd node_modules/myproject-types && npm install && tsc"
  }
}
  1. 调整tsconfig.json的include规则,确保编译时能找到生成的JS文件,同时修改业务代码中的引用路径为编译后的dist路径,或者直接从包入口引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:45:04