繁体   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