簡體   English   中英

如何在我的 Javascript 文件而不是命令行中設置環境變量?

[英]How can I set environment variables in my Javascript file rather than the command line?

我正在編寫一個連接到 Google Sheets API 的程序。 理論上我可以在 shell 中設置環境變量,但這不是我想要做的。 我試過了:

var authorizationDetails = {
    "type": "service_account",
    "project_id": "myapp",
    "private_key_id": "xxxxx",
    "private_key": "-----BEGIN PRIVATE KEY-----...---END PRIVATE KEY-----\n",
    "client_email": "myproj@myproj.iam.gserviceaccount.com",
    "client_id": "yyyyy",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/myapp%40myapp.iam.gserviceaccount.com"
  }

process.env.GOOGLE_CLOUD_PROJECT = 'myProject';
process.env.GOOGLE_APPLICATION_CREDENTIALS = authorizationDetails;

我得到

UnhandledPromiseRejectionWarning: Error: The file at [object Object] does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/mnt/c/Users/me/desktop/myfolder/myproj/myfolder/[object Object]'
    at Object.realpathSync (fs.js:1461:7)
    at GoogleAuth._getApplicationCredentialsFromFilePath

環境變量需要在主函數之前設置。 如何在 node.js 腳本本身中設置環境變量?

包 dotenv 將從項目中的 .env 文件中提取。

https://www.npmjs.com/package/dotenv

我認為您的問題是您試圖將環境變量分配給 Javascript 對象。 它必須是一個字符串。 正如您從錯誤輸出中看到的那樣,Google API 能夠看到您將 GOOGLE_APPLICATION_CREDENTIALS 變量設置為什么。 由於您的問題具體是如何從 JS 內部而不是外部執行此操作,請嘗試以下操作:

process.env.GOOGLE_APPLICATION_CREDENTIALS = "/my/file/with/credentials.json";

我編輯了我的答案,因為GOOGLE_APPLICATION_CREDENTIALS 需要文件路徑而不是 JSON 字符串。 但是,您沒有將環境變量分配給非字符串化的 JavaScript 對象仍然是正確的。

多環境

您需要做的是安裝一個名為dotenv的包,它允許您在自己的專用文件中創建環境變量:

npm i dotenv

鏈接到包 → https://www.npmjs.com/package/dotenv


安裝后,請盡早在項目中使用dotenv包,如下所示:

// Main.js
require('dotenv').config()
// code below
...

.env 文件

然后在您的項目的根文件夾(您的package.json所在的位置)創建一個名為.env的文件,然后您可以創建這樣的環境變量:

// .env
NEW_VAR="hello"
ANOTHER_ONE="DJ Khaled"

.env 的語法

就像在任何代碼 lang 中用.env聲明一個變量一樣, NAME=VALUE你的 env 變量的名稱應該都是大寫和 use_snake_case,它不需要只是良好的實踐。

加上代碼中的大寫看起來很酷 ( ▀ ͜͞ʖ▀) (ง ͠° ͟ل͜ ͡°)ง


然后你可以像使用任何環境變量一樣使用它們:

console.log(process.env.NEW_VAR)

獎金

如果您想將.env文件放在根文件夾之外的其他位置,則可以在包含dotenv包時執行此dotenv

//Main.js
require('dotenv').config({path: __dirname + 'path/to/env/file/.env'})
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM