جاوااسکریپت - متغیر محیطی با 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 استفاده کنم؟
- پیشبارگذاری dotenv: node --require dotenv/config index.js (توجه: با این روش نیازی به وارد کردن dotenv نیست)
- به جای dotenv از dotenv/config استفاده کنید (توجه: نیازی به فراخوانی dotenv.config() ندارید و باید گزینهها را از طریق خط فرمان یا متغیرهای محیطی با این روش منتقل کنید)
- یک فایل جداگانه ایجاد کنید که ابتدا پیکربندی را اجرا کند همانطور که در این نظر در #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`)
})
حالا از آن در هر جایی از پروژه خود استفاده کنید
همیشه خوب است که مستندات را بخوانیم
