.env文件的作用和使用方法

目錄

?

什么是 .env 文件?

為什么要使用 .env 文件?(好處)

如何使用 .env 文件?

通用步驟:

具體技術棧中的實現:

最佳實踐和注意事項

總結


?

什么是 .env 文件?

.env 文件(英文全稱 environment,即“環境”)是一個純文本文件,用于??存儲應用程序的環境變量??。每一行定義一個變量,格式通常是 鍵=值 對,通常我們創建好之后丟在項目的根目錄下

例如,一個典型的 .env 文件可能長這樣:

# 數據庫連接配置
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=my_secret_password# 第三方API密鑰
API_KEY=abcdef123456
STRIPE_SECRET_KEY=sk_test_...# 應用運行配置
NODE_ENV=development
DEBUG=true
APP_PORT=3000

為什么要使用 .env 文件?(好處)

使用 .env 文件主要基于以下幾個核心好處:

  1. ??安全性(最重要)??

    • ??將敏感信息與代碼分離??:像數據庫密碼、API 密鑰、加密鹽等絕對不應該直接硬編碼在源代碼中。如果代碼被上傳到公開的Git倉庫(如GitHub),這些秘密就會瞬間暴露。
    • .env 文件通常被添加到 .gitignore 中,確保它不會被提交到版本控制系統,從而保護了敏感信息。
  2. ??配置管理??

    • ??區分不同環境??:你可以為不同的運行環境(開發、測試、生產)創建不同的 .env 文件(如 .env.development, .env.production),輕松管理不同的配置,而無需修改代碼。
    • ??示例??:
      • 開發環境 (.env.development):使用本地的測試數據庫。
      • 生產環境 (.env.production):使用云上正式數據庫的地址和密碼。
  3. ??協作便利性??

    • 團隊協作時,你可以在項目中提供一個示例文件(如 .env.example),里面列出項目需要的所有環境變量鍵名,但不包含真實的值。
    • 新成員克隆項目后,只需復制 .env.example.env,然后填入自己的本地配置值即可,非常清晰方便。
  4. ??可移植性??

    • 應用程序的行為由環境變量控制,使得它可以在任何地方(你的筆記本、同事的電腦、云服務器、Docker容器)運行,只要提供相應的 .env 文件即可,應用本身無需改變。

如何使用 .env 文件?

使用方法根據你使用的編程語言和框架有所不同,但核心流程是一致的。

通用步驟:

  1. ??創建文件??:在你的項目根目錄下創建一個名為 .env 的文件。
  2. ??定義變量??:在文件中以 KEY=VALUE 的格式寫入你的配置。??注意:值通常不需要引號??,除非值本身包含空格或特殊字符。
    DB_HOST=localhost
    DB_USER=admin
  3. ??忽略文件??:??務必??將 .env 添加到你的 .gitignore 文件中,以防止它被意外提交。
    # .gitignore
    .env
  4. ??讀取文件??:在你的應用程序中,使用特定的庫或模塊來加載 .env 文件,并將其中的變量注入到應用的環境變量中。

具體技術棧中的實現:

??1. Node.js (使用 dotenv 庫)??
這是最經典的用法。

  • ??安裝??:
    npm install dotenv
  • ??在應用入口文件(如 app.jsindex.js)的最頂部加載??:
    require('dotenv').config(); // 默認會讀取項目根目錄下的 .env 文件// 現在 process.env 中就有了 .env 文件里定義的變量
    console.log(process.env.DB_HOST); // 輸出 'localhost'
    console.log(process.env.DB_USER); // 輸出 'admin'
  • 許多現代框架(如 Next.js, Vue CLI, Create React App)已經內置了 dotenv 支持,你只需創建文件即可,無需顯式調用 require(‘dotenv’).config()

??2. Python (使用 python-dotenv 庫)??

  • ??安裝??:
    pip install python-dotenv
  • ??使用??:
    from dotenv import load_dotenv
    import osload_dotenv()  # 加載 .env 文件中的變量到 os.environdb_host = os.getenv('DB_HOST')
    db_user = os.getenv('DB_USER')

??3. PHP (使用 vlucas/phpdotenv)??

  • ??安裝 (通過Composer)??:
    composer require vlucas/phpdotenv
  • ??使用??:
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();$dbHost = $_ENV['DB_HOST'];
    $dbUser = $_ENV['DB_USER'];

??4. 在 Docker 中使用??
在 Docker 世界中,環境變量尤為重要。你可以在 docker run 命令中直接使用 --env-file 參數來指定 .env 文件。

docker run --env-file .env -p 80:80 my-app

或者在 docker-compose.yml 文件中指定:

version: '3'
services:my-app:image: my-appenv_file: .env

最佳實踐和注意事項

  • ??不要提交 .env??:再次強調,這是安全底線。通過 .gitignore 確保它不會進入版本歷史。
  • ??提供 .env.example??:在倉庫中包含一個示例文件,列出所有需要的鍵,方便其他開發者。
    # .env.example
    DB_HOST=
    DB_USER=
    DB_PASS=
    API_KEY=
  • ??不要濫用??:并非所有配置都適合放在 .env 文件中。它更適合??與環境相關或敏感的??配置。對于應用內部固定不變的配置,使用專門的配置文件可能更合適。
  • ??變量命名??:通常使用大寫字母和下劃線 (_) 來命名,如 AWS_ACCESS_KEY_ID,這是一種廣泛接受的約定。
  • ??生產環境??:在云服務器或容器平臺(如 Heroku, Vercel, AWS, Docker Swarm, Kubernetes)上,通常有專門的管理界面讓你設置環境變量,而無需上傳 .env 文件本身。在這些平臺上,你應該使用其提供的配置工具。

總結

.env 文件是一個簡單卻極其強大的工具,它通過 ??“配置與代碼分離”?? 的原則,極大地提升了項目的??安全性、可維護性和可移植性??。無論你是全棧、后端還是前端開發者,掌握它都是必備技能。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96687.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96687.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96687.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度拆解 Python 裝飾器參數傳遞:從裝飾器生效到參數轉交的每一步

在 Python 裝飾器的學習中,“被裝飾函數的參數如何傳遞到裝飾器內層函數”是一個高頻疑問點。很多開發者能寫出裝飾器的基本結構,卻對參數傳遞的底層邏輯一知半解。本文將以一段具體代碼為例,把參數傳遞過程拆成“裝飾器生效→調用觸發→參數…

【Vue2 ?】Vue2 入門之旅 · 進階篇(七):Vue Router 原理解析

在前幾篇文章中,我們介紹了 Vue 的性能優化機制、組件緩存等內容。本篇將深入解析 Vue Router 的原理,了解 Vue 如何管理路由并進行導航。 目錄 Vue Router 的基本概念路由模式:hash 和 history路由匹配原理導航守衛Vue Router 的路由過渡動…

Linux磁盤級文件/文件系統理解

Linux磁盤級文件/文件系統理解 1. 磁盤的物理結構 磁盤的核心是一個利用磁性介質和機械運動進行數據讀寫的、非易失性的存儲設備。 1.1 盤片 盤片是傳統機械硬盤中最核心的部件,它是數據存儲的物理載體。盤片是一個堅硬的、表面極度光滑的圓形碟片,被安裝…

【星海出品】rabbitMQ - 叁 應用篇

rabbitMQ 的基礎知識這里就不闡述了,可以參看我早年寫的文章 -> rabbitMQ 入門 https://blog.csdn.net/weixin_41997073/article/details/118724779 Celery 官網:http://www.celeryproject.org/ Celery 官方文檔英文版:http://docs.celeryproject.org/en/latest/index.h…

C# 每個chartArea顯示最小值、平均值、最大值

private void AddStatisticsAnnotations(ChartArea chartArea, int channelIndex) {RemoveExistingAnnotations(channelIndex);// 獲取ChartArea的相對坐標(百分比)float chartAreaX chartArea.Position.X; // X坐標(百分比)floa…

打破“不可能三角”:WALL-OSS開源,具身智能迎來“安卓時刻”?

目錄 引言:當“大腦”學會思考,機器人才能走出實驗室 一、具身智能的“不可能三角”:機器人“大腦”的核心困境 二、WALL-OSS的四把重錘:如何系統性地破解難題? 2.1 第一錘:更聰明的“大腦”架構 —— …

SigNoz分布式追蹤新體驗:cpolar實現遠程微服務監控

前言 SigNoz是一款開源的應用性能監控工具,專為微服務架構設計,集成了指標、追蹤和日志分析功能。它能夠全面監控分布式系統的性能,幫助開發團隊快速定位問題根源。SigNoz支持OpenTelemetry協議,可以無縫集成各種編程語言和框架&…

python編程原子化多智能體綜合編程應用(下)

上述代碼實現了基于Mesa框架的診斷智能體類,包含以下核心功能: 模塊化設計:通過類屬性分離數據與行為,支持不同專科智能體的擴展 狀態管理:實現idle/processing/error等狀態轉換,支持任務調度 診斷推理:集成機器學習模型,支持癥狀提取與多分類診斷 錯誤處理:包含模型加…

QT M/V架構開發實戰:QSqlQueryModel/ QSqlTableModel/ QSqlRelationalTableModel介紹

目錄[TOC](目錄)前言一、初步介紹二、QSqlQueryModel1.基礎定位2.特點3.核心接口4.典型用法5.優缺點三、QSqlTableModel1.基礎定位2.特點3.核心接口4.典型用法5.優缺點四、QSqlRelationalTableModel1.基礎定位2.特點3.核心接口4.典型用法 (示例:employees表有 dept_…

Terraform 從入門到實戰:歷史、原理、功能與阿里云/Azure 上手指南

前言:在云時代,企業的IT基礎設施早已從“幾臺服務器”演變為“橫跨多云的復雜網絡、計算、存儲集群”。但隨之而來的,是管理復雜度的爆炸式增長:開發環境和生產環境不一致、手動配置容易出錯、多云平臺操作方式各異、資源變更難以…

【計算機網絡 | 第10篇】信道復用技術

文章目錄信道復用技術:高效利用通信資源的智慧方案一、頻分復用(FDM):按頻率劃分的并行通道二、時分復用(TDM):按時間分割的輪流占用三、統計時分復用(STDM):…

安卓13_ROM修改定制化-----禁用 Android 導航按鍵的幾種操作

Android 設備的導航按鍵通常包括后退鍵(Back)、主頁鍵(Home)和最近鍵(Recents),這些按鍵位于屏幕底部或設備實體區域。禁用導航按鍵可以幫助在特定應用場景(如信息亭模式或兒童鎖模式)中限制用戶操作。安卓設備上禁用底部虛擬導航鍵(返回、主頁、多任務鍵)有多種方法…

通過S參數測量評估電感阻抗:第2部分

S21雙端口分流和雙端口串聯方法 T這是兩篇文章中的第二篇,專門討論使用網絡分析儀測量 S 參數進行電感阻抗評估主題。上一篇文章 [1] 描述了阻抗測量和計算S11使用單端口分流器、雙端口分流器和雙端口串聯方法的參數。本文專門介紹阻抗測量和計算S21使用雙端口分流…

[deepseek] C語言頭文件與匯編實現討論

我想詢問一種代碼實現方式,使用C語言,例如main.c包含了自己編寫的庫文件abc.h,我想問的是:一、abc.h中是否可以有實現函數的代碼;二、abc.h中的函數是否可以在另一個后綴為asm的匯編文件中實現?非常好&…

`.cursorrules` 與 `.cursorcontext`:Cursor AI 編程助手時代下的“雙軌配置”指南

.cursorrules 與 .cursorcontext:AI 編程助手時代下的“雙軌配置”指南關鍵詞:Cursor、AI 編程、上下文管理、開發規范、技術治理 適合讀者:前端 / 全棧工程師、技術負責人、AI 輔助編程實踐者1. 為什么又多了兩個“點”文件? 隨著…

XR 和 AI 在 Siggraph 2025 上主導圖形的未來,獲取gltf/glb格式

Meta 的 Boba 和 Tiramisu XR 耳機(來源:Meta) Siggraph 2025 今年重返不列顛哥倫比亞省溫哥華,慶祝《玩具總動員》誕生 30 周年和視頻游戲實時渲染 20 周年。雖然 Siggraph 需要時間來欣賞過去,但它更多的是展望未來…

在 Ubuntu 22.04 系統(CUDA 12.9)中,通過本地DEB 包安裝 cuDNN 9.13.0 的方法步驟

以下是在 Ubuntu 22.04 系統(CUDA 12.9)中,通過本地單個 DEB 包安裝 cuDNN 9.13.0 的完整步驟,核心包含 GPG 密鑰配置與包安裝驗證,確保每一步可執行。 一、安裝前核心檢查(必做) 確保系統已滿足基礎條件,避免安裝失敗: 驗證 CUDA 版本:打開終端執行命令,確認當前…

Element 中 upload 編輯回顯文件上傳信息技巧

文章目錄需求分析需求 upload 編輯狀態下回顯已上傳的文件信息 分析 添加fileList <el-uploadstyle"width: 100%"ref"uploadRef"class"upload-demo"action"/prod-api/jc/files/upload"multiple:limit"1":on-success&q…

php簡介(第一天打卡)

一.php簡介 1.什么是php&#xff1f; 1.1 Php 為什么叫這個名字&#xff1f; Personal home page 最開始用于個人主頁建站 后更名為 hypertext preprocessor 超文本預處理 1.2 php是屬于哪種語言&#xff1f; 后端語言 &#xff08;從開發角度分類&#xff09; 服務端語言…

Android 車聯網——車載儀表屏開發(二十六)

通常汽車啟動后需要快速顯示儀表,而車載娛樂系統所在的Android系統,啟動是比較耗時的,所以通常儀表系統會做在一個小型輕量化的系統內,從而達到快速啟動的效果,最終實現汽車一發動,就立刻能顯示出儀表必須顯示的各項內容。 一、儀表功能介紹 1、儀表的發展 機械儀表:通…