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

在TypeScript中如何通过.env配置的路径动态导入JSON文件

前置说明

ES 标准的静态 import 语句不支持传入动态变量作为导入路径,因为静态导入是在代码编译阶段执行的,执行时机早于 .env 文件的加载阶段,因此无法直接用静态导入实现你的需求,我们可以通过文件读取+JSON解析或者动态导入的方式实现。


第一步:修正 .env 配置格式

标准的 .env 文件为键=值格式,而非JSON格式,请修改你的.env文件内容如下:

KEY_FILE_PATH=home/path/account.json

第二步:安装依赖(Node.js环境)

需要先安装dotenv库用于读取.env配置:

npm install dotenv

第三步:代码修改

方案1:同步读取(和原有代码逻辑完全兼容,无需修改方法异步性,推荐)

直接通过文件读取API加载JSON文件,解析后使用:

// 顶部优先加载dotenv,注入环境变量
import dotenv from 'dotenv'
import fs from 'fs'
import path from 'path'

dotenv.config()
// 拼接成绝对路径,避免相对路径执行上下文错误
const keyFilePath = path.resolve(process.cwd(), process.env.KEY_FILE_PATH)
// 读取并解析JSON文件
const keys = JSON.parse(fs.readFileSync(keyFilePath, 'utf-8'))

class SecurityServices {
   getToken(){
     return keys.certs
   }
}

方案2:ES模块动态导入

如果你希望用导入的方式加载JSON,可以采用ES动态导入API,因为是异步逻辑,需要对应改造方法:

import dotenv from 'dotenv'
import path from 'path'

dotenv.config()
const keyFilePath = path.resolve(process.cwd(), process.env.KEY_FILE_PATH)

// 缓存导入结果避免重复加载
let cachedKeys = null
async function loadKeys() {
  if (cachedKeys) return cachedKeys
  const module = await import(keyFilePath, { assert: { type: 'json' } })
  cachedKeys = module.default
  return cachedKeys
}

class SecurityServices {
   async getToken(){
     const keys = await loadKeys()
     return keys.certs
   }
}

注意事项

  • 如果是前端工程(如Vite、Webpack搭建的项目),无需安装dotenv,框架会自动读取.env文件,其中Vite要求自定义环境变量必须加VITE_前缀,通过import.meta.env.VITE_KEY_FILE_PATH读取即可。
  • 请确保配置的文件路径有读取权限,生产环境建议将敏感JSON文件放到项目外的安全目录,避免被打包到发布产物中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:24:04