91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

dotenv怎么使用

發布時間:2022-12-27 16:27:14 來源:億速云 閱讀:124 作者:iii 欄目:開發技術

這篇文章主要講解了“dotenv怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“dotenv怎么使用”吧!

    前言

    dotenv 是一個用于加載環境變量的庫,在 Node.js 應用程序中可以使用它來簡化對環境變量的訪問。在日常開發中起到了很重要的作用。

    如何使用

    使用 dotenv 庫,可以在應用程序中創建一個名為 .env 的文件,并在該文件中存儲環境變量。然后,可以使用 dotenv 庫將這些變量加載到 Node.js 應用程序中。

    例如,您可以在 .env 文件中存儲以下內容:

    DB_HOST=localhost
    DB_USERNAME=user
    DB_PASSWORD=password

    使用以下代碼將這些變量加載到應用程序中:

    require('dotenv').config();
    const dbHost = process.env.DB_HOST;
    const dbUsername = process.env.DB_USERNAME;
    const dbPassword = process.env.DB_PASSWORD;

    源碼解析

    閱讀源碼之前,可以猜測 dotenv 所做的工作有如下幾點。

    • 讀取 .env 文件

    • 解析文件

    • 將解析出的變量賦值給 process.env

    來看下源碼是如何完成上述功能的。

    讀取文件

    function config (options) {
      let dotenvPath = path.resolve(process.cwd(), '.env')
      let encoding = 'utf8'
      const debug = Boolean(options && options.debug)
      const override = Boolean(options && options.override)
      if (options) {
        if (options.path != null) {
          dotenvPath = _resolveHome(options.path)
        }
        if (options.encoding != null) {
          encoding = options.encoding
        }
      }
    }

    代碼中定義了一個變量 dotenvPath,并將其賦值為使用 path.resolve 函數處理后的路徑。

    path.resolve 函數會從右到左依次遍歷參數,并返回一個絕對路徑。函數的第一個參數是 process.cwd,它返回 Node.js 進程的當前工作目錄。第二個參數是字符串 '.env',它表示要在當前工作目錄中查找的文件名。

    之后會進行一些參數的判斷,如果參數中有path這個變量,則使用_resolveHome函數處理:

    function _resolveHome (envPath) {
      return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath
    }

    os.homedir 函數返回當前用戶的主目錄路徑。

    _resolveHome 函數可用于將以波浪號開頭的路徑解析為主目錄的實際路徑。例如,如果 envPath 等于 '~/documents/file.txt',則函數將返回 '/home/user/documents/file.txt'(在基于 Unix 的系統上)或 'C:\Users\user\documents\file.txt'(在 Windows 上)。

    解析文件

    // 使用 `fs.readFileSync` 函數以指定的編碼方式從文件系統中讀取文件內容
    const parsed = DotenvModule.parse(fs.readFileSync(dotenvPath, { encoding }))
    // 解析文件
    function parse (src) {
      const obj = {}
      // 轉為string類型
      let lines = src.toString()
      // 將換行符轉換為相同的格式
      lines = lines.replace(/\r\n?/mg, '\n')
      let match
      while ((match = LINE.exec(lines)) != null) {
        const key = match[1]
        // Default undefined or null to empty string
        let value = (match[2] || '')
        // Remove whitespace
        value = value.trim()
        // Check if double quoted
        const maybeQuote = value[0]
        // Remove surrounding quotes
        value = value.replace(/^(['"`])([\s\S]*)\1$/mg, '$2')
        // Expand newlines if double quoted
        if (maybeQuote === '"') {
          value = value.replace(/\\n/g, '\n')
          value = value.replace(/\\r/g, '\r')
        }
        // Add to object
        obj[key] = value
      }
      return obj
    }

    首先使用正則表達式 LINE 來匹配字符串 lines 中的內容。

    const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg

    這個正則表達式的目的是匹配類似于環境變量的行。它可以匹配以下格式的行:

    VARNAME=value
    VARNAME: value
    export VARNAME=value
    export VARNAME: value

    最后會返回一個包含所有變量的對象。

    賦值操作

      try {
        // Specifying an encoding returns a string instead of a buffer
        const parsed = DotenvModule.parse(fs.readFileSync(dotenvPath, { encoding }))
        Object.keys(parsed).forEach(function (key) {
          if (!Object.prototype.hasOwnProperty.call(process.env, key)) {
            process.env[key] = parsed[key]
          } else {
            if (override === true) {
              process.env[key] = parsed[key]
            }
            if (debug) {
              if (override === true) {
                _log(`"${key}" is already defined in \`process.env\` and WAS overwritten`)
              } else {
                _log(`"${key}" is already defined in \`process.env\` and was NOT overwritten`)
              }
            }
          }
        })
        return { parsed }
      }

    拿到解析后的對象,使用 Object.keys(parsed) 獲取所有的鍵,然后使用forEach循環將所有的鍵添加到process.env 中。

    感謝各位的閱讀,以上就是“dotenv怎么使用”的內容了,經過本文的學習后,相信大家對dotenv怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    呈贡县| 伊宁县| 双江| 孙吴县| 寿光市| 墨玉县| 清远市| 德惠市| 内江市| 新建县| 惠水县| 牙克石市| 河东区| 江安县| 奈曼旗| 河南省| 北流市| 澄城县| 沙雅县| 西乌珠穆沁旗| 湖州市| 阳江市| 武隆县| 苍溪县| 临武县| 阳新县| 炎陵县| 东海县| 清水河县| 页游| 正安县| 休宁县| 凉山| 肥东县| 徐水县| 丹巴县| 分宜县| 隆林| 临海市| 施甸县| 吉木萨尔县|