带有 dotenv 和 TypeScript 的环境变量

23 javascript node.js typescript nestjs dotenv

我创建这个.env文件:

TYPE=xxx
HOST=xxx,
PORT=xxx,
USERNAME=xxx,
PASSWORD=xxx,
DATABASE=xxx,
Run Code Online (Sandbox Code Playgroud)

在我的文件中,我以这种方式使用:

import * as dotenv from "dotenv";

dotenv.config();

export const typeOrmConfig: TypeOrmModuleOptions = {
    port: process.env.PORT
}
Run Code Online (Sandbox Code Playgroud)

但我可以用我只能port从变量.env文件,我不能用变量的休息,谁能告诉我,为什么我不能用我的瓦尔的休息吗?

Hus*_*ain 43

其实你已经定义了 .env 文件的路径

像这样尝试

import * as dotenv from "dotenv";
dotenv.config({ path: __dirname+'/.env' });
Run Code Online (Sandbox Code Playgroud)

也试试这个

require('dotenv').config({ path: __dirname+'/.env' });
Run Code Online (Sandbox Code Playgroud)

根据需要更改 .env 文件的路径

参考:https : //www.npmjs.com/package/dotenv


Die*_*ola 39

如果你得到未定义的值并且如果你使用ES6,你需要按如下方式导入它(.env 文件必须位于项目根目录中):

如何在导入中使用 dotenv?

  1. 预加载 dotenv:node --require dotenv/config index.js (注意:您不需要使用此方法导入 dotenv)
  2. 导入 dotenv/config 而不是 dotenv (注意:您不需要调用 dotenv.config() 并且必须使用此方法通过命令行或环境变量传递选项)
  3. 创建一个单独的文件,该文件将首先执行配置,如 #133 的评论中所述

您必须导入项目的 app.ts 文件(首先) Express 示例:

应用程序.ts

//here
import 'dotenv/config'

import express from 'express'
import { userRouter } from './routes/user'

const app = express()

app.use(`/users`, userRouter)
app.listen(process.env.PORT, () => {
    console.log(`running`)
})
Run Code Online (Sandbox Code Playgroud)

现在在您的项目中的任何地方使用它

阅读文档总是好的


van*_*102 7

我的项目已eslint设置,所以我必须禁用该import/first规则

/* eslint-disable import/first */
require('dotenv').config();

import Koa from 'koa';

import { Logger } from './utils/loggers';
import { app } from './app';

const LOGGER = Logger();
const port = parseInt(process.env.PORT as string, 10) || 8081;

const server = (server: Koa) => {
  server.listen(port, () => {
    LOGGER.info(`> Ready on http://localhost:${port}`);
  });
};

server(app());

Run Code Online (Sandbox Code Playgroud)

我们还可以使用:

import 'dotenv/config'
Run Code Online (Sandbox Code Playgroud)

require('dotenv').config({path:path_to_dotenv});
Run Code Online (Sandbox Code Playgroud)

更加灵活。