TypeScript 应用配置:库与方法

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript 应用配置:工具与方法概览



在现代 TypeScript 开发中,正确组织应用配置是一项关键任务。代码的安全性、可移植性和可测试性都取决于您如何管理设置。本文将介绍用于 TypeScript 应用配置的主要库和工具、它们的特点以及使用示例。



为什么正确的配置很重要?

配置包括:

  • 环境变量(API 密钥、数据库 URL)
  • 环境参数(development、staging、production)
  • 框架和库的设置
  • 机密数据(密码、令牌)

使用 TypeScript 带来了强类型化的优势,有助于在编译阶段避免错误。让我们来看看用于配置的最佳工具。



1. dotenv — 环境变量的基础工具

dotenv 库将 .env 文件中的变量加载到 process.env 中。在 TypeScript 中,它通常与附加类型一起使用。



安装

npm install dotenvnpm install -D @types/node   # 用于 process.env 的类型


使用示例

// .envPORT=3000DATABASE_URL=mongodb://localhost:27017/mydbSECRET_KEY=mysecretkey

// config.tsimport dotenv from 'dotenv';dotenv.config();

interface AppConfig { port: number; databaseUrl: string; secretKey: string;}

export const config: AppConfig = { port: parseInt(process.env.PORT || '3000', 10), databaseUrl: process.env.DATABASE_URL || '', secretKey: process.env.SECRET_KEY || '',};


优点:简单、轻量、事实标准。
缺点:无验证,所有值均为字符串。



2. config — Node.js 的分层配置

config 库允许您按环境组织配置文件(default.json、production.json、development.json)。



安装

npm install confignpm install -D @types/config


结构示例

// config/default.json{    "server": {        "port": 3000    },    "db": {        "host": "localhost",        "port": 27017    }}

// config/production.json{ "server": { "port": 8080 }, "db": { "host": "production-db.example.com" }}

// app.tsimport config from 'config';

interface ServerConfig { port: number;}

const serverConfig = config.get<ServerConfig>('server');console.log(serverConfig.port); // 开发环境为 3000,生产环境为 8080


优点:分层结构、自动环境选择、支持 TypeScript。
缺点:依赖文件系统,不适用于 serverless。



3. convict — 带模式和验证的配置

convict 允许您定义严格的配置模式,包含类型、默认值和验证。



安装

npm install convictnpm install -D @types/convict


示例

import convict from 'convict';

const config = convict({ env: { doc: 'Application environment', format: ['production', 'development', 'test'], default: 'development', env: 'NODE_ENV' }, port: { doc: 'Port to bind', format: 'port', default: 3000, env: 'PORT' }, db: { host: { doc: 'Database host', format: String, default: 'localhost', env: 'DB_HOST' }, port: { doc: 'Database port', format: 'port', default: 5432, env: 'DB_PORT' } }

推荐