第一个 AI 调用------TypeScript 工程初始化与配置管理
本文基于 NestJS + LangChain.js + TypeScript 技术栈,手把手带你从零初始化一个工程,并搭好环境变量配置管理体系。当你真正发出第一个 AI 调用前,环境必须先稳。
一、前置准备
在动手之前,请确认本机已经具备以下环境:
- Node.js ≥ 20(NestJS 与 LangChain.js 的现代版本均依赖新版 Node 特性)
- pnpm(包管理器,比 npm 更快、磁盘占用更省)
验证命令:
bash
node -v
pnpm -v
二、初始化工程
1. 新建工程目录
任意取名,这里以 1.basic 为例:
bash
mkdir 1.basic
cd 1.basic
2. 初始化 package.json
bash
pnpm init -y
3. 配置 scripts 与开发依赖
打开 package.json,补充构建脚本与 devDependencies:
json
{
"scripts": {
"build": "tsc"
},
"devDependencies": {
"@types/node": "22.20.1",
"typescript": "7.0.2"
}
}
注意包名是
@types/node(types 为复数)。少写 s 会导致pnpm i找不到包。
4. 安装依赖
bash
pnpm i
5. 生成 tsconfig
bash
npx tsc --init
该命令会在根目录生成 tsconfig.json。
6. 调整 tsconfig.json
我们不是 React 应用,需要关掉 JSX 相关配置,并打开 types 与 rootDir:


json
{
"compilerOptions": {
"target": "ES2022",
"module": "CommonJS",
"moduleResolution": "node",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"types": ["node"],
// "jsx": "react-jsx", // 非 React 项目,保持注释
// "verbatimModuleSyntax": true // 按需关闭,避免类型导入报错
}
}
关键项说明:
rootDir:源码根目录,编译器只编译这里的文件。outDir:编译产物输出目录(默认dist)。types: ["node"]:让 TS 识别 Node 内置 API 的类型(如process)。verbatimModuleSyntax/jsx:React 专属配置,非前端项目保持关闭。
7. 编写入口文件
新建 src/index.ts:
ts
console.log("hello");
8. 编译
bash
pnpm build
执行后根目录出现 dist 文件夹,内含编译后的 index.js。

9. 运行
bash
node dist/index.js
终端输出:
text
hello
到这一步,基础 TypeScript 工程已经跑通。
三、配置管理:环境变量
AI 调用需要 API_KEY 等敏感信息,绝不能硬编码进源码 ,也不能提交到 Git。正确做法是用 .env 文件 + dotenv 在运行时注入。
10. 创建 .env
在项目根目录(与 src 同级)新建 .env:
env
API_KEY=123
这里先填一个虚拟值,真实开发时替换为可用的 Key。
11. 安装 dotenv
在 package.json 的 dependencies 中加入:
json
{
"dependencies": {
"dotenv": "17.4.2"
}
}
然后安装:
bash
pnpm i
12. 在代码中加载环境变量
修改 src/index.ts,在文件最顶部 导入 dotenv/config:
ts
import "dotenv/config";
console.log("hello");
console.log(process.env.API_KEY);
13. 重新构建并运行
bash
pnpm build
node dist/index.js
输出:
text
hello
123

14. 验证热感知
修改 .env 中的 API_KEY=456,无需重新 build,直接再次运行:
bash
node dist/index.js
输出变为:
text
hello
456
说明 dotenv 在程序启动时实时读取 .env,环境变量的变更在下次运行即生效。
四、关键原理解析
为什么改 .env 不用重新 build?
dotenv 是在运行时 (Node 进程启动、import "dotenv/config" 执行时)同步读取 .env 并写入 process.env 的。而 tsc 编译只处理 TypeScript 类型与语法,不会把环境变量打包进 dist。因此:
- 改源码 → 必须
pnpm build重新编译 - 改
.env→ 只需重新node dist/index.js
.env 为什么要进 .gitignore?
.env 常含密钥,提交到仓库会造成泄露。在 .gitignore 中加入:
gitignore
.env
正式项目中通常用 .env.example 提交一份字段模板(值留空),供协作者参考, 例如之前发布过的小娜ai聊天工具。
五、小结
至此,我们完成了:
- 用 pnpm + TypeScript 初始化标准工程结构;
- 配置了
tsconfig.json(rootDir / outDir / types); - 通过
dotenv实现了环境变量的安全注入与运行时读取。
这是所有 AI 应用(NestJS 服务、LangChain.js 链路)统一的起点。下一步,你就可以在 index.ts 里用 process.env.API_KEY 发起第一个大模型调用了。
技术栈:NestJS · LangChain.js · TypeScript