如何在运行时通过文件名读取config.ts并自动填充配置属性?
可以实现,以下是几种可行方案
直接导入(最推荐)
如果不需要动态指定文件名,直接导入是最简单的方式,process.env 变量会自动填充:
// 其他模块中 import config from './config'; console.log(config.token); // 自动获取 process.env.API_TOKEN 的值
动态导入(支持传文件名)
如果必须动态传入文件名,用 ES 动态导入语法即可,环境变量同样会自动填充:
async function loadConfig(filePath: string) { const { default: config } = await import(filePath); return config; } // 使用示例 loadConfig('./config').then(config => { console.log(config.token); // 已自动填充环境变量值 });
注意:动态导入需要运行环境支持 ES 模块,或者打包工具(如 Webpack、Vite)配置正确。
读取源码解析(特殊场景用)
如果要直接读取未编译的 TS 文件源码,需要用 fs 读取内容后,借助 TypeScript 编译器 API 转译执行,这种方式复杂且性能一般,仅适用于特殊需求:
import fs from 'fs'; import * as ts from 'typescript'; function loadTsConfig(filePath: string) { const content = fs.readFileSync(filePath, 'utf8'); const jsContent = ts.transpile(content, { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }); const module = { exports: {} }; eval(jsContent); return module.exports.default; } // 使用示例 const config = loadTsConfig('./config.ts'); console.log(config.token);
关键提示
- 所有方案中,
process.env变量都会在代码执行时自动注入,token、buildId这类属性会自动填充对应值。 - 动态导入的文件路径需为相对当前模块的路径或绝对路径,确保 Node.js 能正确定位模块。
- 浏览器环境下,需确保打包工具已完成环境变量注入(比如 Vite 的
import.meta.env、Webpack 的DefinePlugin)。
内容的提问来源于stack exchange,提问作者quldude
相关产品推荐
相关产品推荐

