جاوااسکریپت - متغیر محیطی با dotenv و TypeScript


من این فایل .env را ایجاد میکنم:

TYPE=xxx
HOST=xxx,
PORT=xxx,
USERNAME=xxx,
PASSWORD=xxx,
DATABASE=xxx,

در فایل من اینطور استفاده میکنم:

import * as dotenv from "dotenv";

dotenv.config();

export const typeOrmConfig: TypeOrmModuleOptions = {
    port: process.env.PORT
}

اما من میتوانم تنها از متغیر port خود از فایل .env استفاده کنم و نمیتوانم از بقیه متغیرها استفاده کنم، آیا کسی میتواند به من بگوید چرا نمیتوانم از بقیه متغیرهایم استفاده کنم؟

پاسخ شماره ۱

در واقع شما مسیر فایل .env را مشخص کردهاید

اینطور امتحان کن

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

این را هم امتحان کن

require('dotenv').config({ path: __dirname+'/.env' });

مسیر فایل .env را طبق نیاز تغییر دهید

مرجع: https://github.com/motdotla/dotenv#options

پاسخ شماره ۲

اگر مقدار undefined دریافت کردید و اگر از ES6 استفاده میکنید، باید آن را به صورت زیر وارد کنید (فایل .env باید در دایرکتوری ریشه پروژه باشد):

چطور از dotenv با import استفاده کنم؟

  1. پیشبارگذاری dotenv: node --require dotenv/config index.js (توجه: با این روش نیازی به وارد کردن dotenv نیست)
  2. به جای dotenv از dotenv/config استفاده کنید (توجه: نیازی به فراخوانی dotenv.config() ندارید و باید گزینهها را از طریق خط فرمان یا متغیرهای محیطی با این روش منتقل کنید)
  3. یک فایل جداگانه ایجاد کنید که ابتدا پیکربندی را اجرا کند همانطور که در این نظر در #133 توضیح داده شده است

شما باید ابتدا در فایل app.ts پروژه خود وارد کنید (مثال با express):

app.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`)
})

حالا از آن در هر جایی از پروژه خود استفاده کنید

همیشه خوب است که مستندات را بخوانیم