Rumah > Artikel > hujung hadapan web > Cara terbaik untuk mengkonfigurasi pembolehubah persekitaran dan berbilang persekitaran dalam Nest.js
Apa yang saya sangat suka tentang Nest.js ialah rangka kerja node.js lengkap yang berkuasa yang memberi anda penyelesaian lengkap yang sesuai untuk membina aplikasi bahagian belakang.
Ia mempunyai sokongan TypeScript terbina dalam dari awal dan menggabungkan elemen OOP (Pengaturcaraan Berorientasikan Objek), FP (Pengaturcaraan Fungsian) dan FRP (Pengaturcaraan Reaktif Berfungsi), seperti yang dikatakan laman web rasmi.
Ia juga mempunyai seni bina dari awal, yang sangat mengagumkan untuk seseorang seperti saya yang suka bekerja dengan projek seni bina berstruktur yang baik.
Dokumentasi sahaja sangat mengagumkan, dan ia merangkumi setiap aspek, termasuk cara menetapkan pembolehubah persekitaran, tetapi bagi saya
Saya tidak begitu faham cara menetapkan berbilang persekitaran.
Mungkin kerana saya baru menggunakan node.js dan nestjs, namun, apabila saya mencari artikel di internet, mereka sentiasa menunjukkan cara yang menggunakan perpustakaan dotenv secara langsung dan bukannya menggunakan nestjs secara asli, yang menggunakan dotenv di bawah tudung.
Dan selepas berjam-jam melihat artikel di sebelah dokumentasi, saya mencari penyelesaian yang berasal dari Nestjs dan fikir saya akan berkongsinya.
Pertama
Anggap kita memerlukan 2 persekitaran untuk projek kita 'dev' dan 'prod'
dan kita memerlukan 2 pembolehubah persekitaran setiap persekitaran: PORT dan URL_DATABASE.
1- Buat 2 fail .env untuk menyimpan PORT dan URL_DATABASE dan namakan fail ( .env.dev dan .env.prod.)
PORT=3500 DATABASE_URL="file:./dev.db"`
2- Buat pembolehubah env yang dipanggil NODE_ENV, tetapi kali ini daripada menyimpannya dalam fail .env, kami akan menyuntiknya dalam skrip permulaan untuk dev dan prod.
Tetapan NODE_ENV boleh berbeza merentas platform (tetingkap, mac atau Linux), jadi kami akan memasang pakej cross-div untuk membolehkan kami menetapkan pembolehubah persekitaran merentas platform.
pasang menggunakan npm
$ npm install --save-dev cross-env
atau menggunakan pnpm
$ pnpm install --save-dev cross-env
Kemudian, ubah suai skrip package.json anda untuk menggunakan cross-env:
"scripts": { "start:dev": "cross-env-shell NODE_ENV=dev nest start --watch", "start:prod": "cross-env-shell NODE_ENV=prod node dist/main", }
Jadi sekarang apabila anda menjalankan aplikasi anda dengan
npm run start:dev
atau
pnpm run start:dev
Anda mempunyai NODE_ENV=dev dan anda boleh menggunakannya merentas aplikasi.
3- Untuk Nestjs membaca fail .env, kita perlu menggunakan ConfigModule dan mengkonfigurasinya dengan betul, tetapi kita perlu memasangnya terlebih dahulu.
npm
$ npm i --save @nestjs/config
pnpm
$ pnpm i --save @nestjs/config
4- Gunakan ConfigModule :
@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: `.env.${process.env.NODE_ENV}`, }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
envFilePath: digunakan untuk menentukan laluan lain untuk fail .env.
atau baca fail yang berbeza daripada fail .env lalai
.env.${process.env.NODE_ENV} akan diterjemahkan kepada .env.dev dan
Jika kita menjalankan arahan
npm run start:prod
.env.${process.env.NODE_ENV} akan diterjemahkan kepada .env.prod.
5- Bagaimana untuk mengakses pembolehubah persekitaran kita
Untuk mengakses pembolehubah env, kami menggunakan ConfigModule.
Kita boleh menggunakannya dalam main.ts
async function bootstrap() { const app = await NestFactory.create(AppModule); const configService = app.get(ConfigService); const port = configService.get('PORT'); await app.listen(port); }
atau jika kami memerlukannya di tempat lain, kami menggunakan suntikan.
contohnya
@Injectable() export class AppService { constructor(private configService: ConfigService) {} getHello(): string { return ( this.configService.get<string>('DATABASE_URL') ); } }
Atas ialah kandungan terperinci Cara terbaik untuk mengkonfigurasi pembolehubah persekitaran dan berbilang persekitaran dalam Nest.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!