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

如何在tsconfig.json中引入.env文件以支持TypeScript转译?

解决TypeScript项目中dotenv无法读取.env.dev文件的问题

问题核心

你的问题根源有两个:

  • TypeScript只处理TS/JS类源码文件,.env属于纯文本配置文件,直接在include里加./config/*会报错,因为TS找不到可编译的输入文件
  • 编译后build目录里没有同步config文件夹,导致dotenv运行时找不到指定路径的.env文件

解决方案

1. 修正tsconfig.json配置

别把.env文件塞进include(TS不处理这类文件),确保源码文件被正确包含即可。修改后的tsconfig.json:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "esModuleInterop": true,
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": true,
    "outDir": "./build",
    "rootDir": "./app"
  },
  "include": ["./app/**/*"], // 明确包含app下所有TS文件
  "exclude": ["node_modules"]
}

2. 把config目录同步到build输出目录

dotenv是运行时读取文件,必须让编译后的build目录里存在config/.env.dev,有两种简单实现方式:

方式一:用npm脚本直接复制

在package.json里加一个编译后执行的复制脚本:

{
  "scripts": {
    "build": "tsc && cp -r ./config ./build", // Linux/macOS环境用这个
    // Windows环境替换成下面的命令
    // "build": "tsc && xcopy .\\config .\\build\\config /E /I"
  }
}

方式二:用copyfiles工具(适合开发环境)

如果是用ts-node直接跑开发服务,先安装copyfiles:

npm install copyfiles --save-dev

然后修改dev脚本:

{
  "scripts": {
    "dev": "copyfiles -u 1 ./config/* ./build && ts-node ./app/index.ts"
  }
}

3. 优化dotenv路径计算(可选)

可以直接从项目根目录计算路径,避开编译后__dirname变化带来的问题:

import * as dotenv from 'dotenv';
import path from 'path';

// 从当前执行命令的目录(项目根目录)出发找.env文件
const dotenvPath = path.join(process.cwd(), `config/.env.${process.env.NODE_ENV}`);
dotenv.config({ path: dotenvPath });

console.log(`dotenvPath: ${dotenvPath}`);
console.log(process.env.SOMEVAR_INSIDE_ENVDEV_FILE);

补充:为什么之前的include会报错?

TypeScript的include字段是用来指定需要编译的TS/JS源码文件,.env是纯文本配置文件,不属于TS的编译输入范畴,所以TS会提示"No inputs were found"。我们不需要让TS转译.env文件,只需要保证它在运行时能被找到就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:24:53