什麼我真正喜歡Nest.js是它是一個強大的完整的node.js框架,為您提供了構建的完整解決方案後端應用程式。
它從一開始就內建了TypeScript支持,並結合了OOP(物件導向程式設計)、FP(函數式程式設計)和FRP(函數響應式程式設計),如官網所說。
它從一開始就具有架構,這對於像我這樣喜歡使用良好的結構化架構專案的人來說是令人驚奇的。
光是文件就讓人印象深刻,涵蓋了方方面面,包括如何設定環境變數,但對我來說
我不太明白如何設定多個環境。
也許是因為我對node.js和nestjs比較陌生,但是,當我在網上查找文章時,他們總是展示一種直接使用dotenv庫的方法,而不是原生使用nestjs,後者在兜帽。
經過幾個小時查看文件旁邊的文章後,我制定了一個 Nestjs 原生的解決方案,並認為我會分享它。
第一的
假設我們的專案需要 2 個環境 'dev' 和 'prod'
每個環境我們需要 2 個環境變數:PORT 與 DATABASE_URL.
1- 建立2 個.env 檔案來儲存PORT 和DATABASE_URL 並命名檔案( .env.dev 和.env.prod.)
PORT=3500 DATABASE_URL="file:./dev.db"`
2- 建立一個名為 NODE_ENV 的環境變量,但這次我們不是將其儲存在 .env 檔案中,而是將其註入到 dev 和 prod 的啟動腳本中。
設定NODE_ENV跨平台(windows、mac或Linux)可能不同,因此我們將安裝一個cross-div套件來允許我們跨平台設定環境變數。
使用 npm 安裝
$ npm install --save-dev cross-env
或使用 pnpm
$ pnpm install --save-dev cross-env
然後,修改 package.json 腳本以使用跨環境:
"scripts": { "start:dev": "cross-env-shell NODE_ENV=dev nest start --watch", "start:prod": "cross-env-shell NODE_ENV=prod node dist/main", }
所以現在當您使用
運行應用程式時
npm run start:dev
或
pnpm run start:dev
您有NODE_ENV=dev,您可以在整個應用程式中使用它。
3-為了讓Nestjs讀取.env文件,我們必須使用ConfigModule並正確配置它,但首先我們需要安裝它。
npm
$ npm i --save @nestjs/config
pnpm
$ pnpm i --save @nestjs/config
4- 使用 ConfigModule :
@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: `.env.${process.env.NODE_ENV}`, }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
envFilePath:用於指定.env檔案的另一個路徑。
或讀取與預設 .env 檔案不同的檔案
.env.${process.env.NODE_ENV} 將轉換為 .env.dev 和
如果我們運行命令
npm run start:prod
.env.${process.env.NODE_ENV} 將轉換為 .env.prod.
5- 如何存取我們的環境變數
要存取環境變量,我們使用 ConfigModule.
我們可以在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); }
或如果我們在其他地方需要它,我們使用注入。
例如
@Injectable() export class AppService { constructor(private configService: ConfigService) {} getHello(): string { return ( this.configService.get('DATABASE_URL') ); } }
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3