如何在 package.json 中使用环境变量或掩码秘密?

How do I use environment variables or mask secrets in package.json?

这是我的 package.json 文件的摘录:

"scripts": {
    "start": "cross-env NODE_ENV=prod npx ./bin/www",
    "migrate": "node-pg-migrate",
    "migrate_dev": "DATABASE_URL=postgres://username:password@localhost:5432/dev_db NODE_ENV=dev node-pg-migrate",
  },

我在 .gitignore 中排除了我的 .env 文件,以确保我的秘密不会泄露到 git 存储库中。我想知道的是,处理 migrate_dev 脚本的 username:password 部分的最佳方法是什么?

(我看过 this,但我很确定我不能使用 .js 文件作为 package.json 的替代品。)

我尝试将环境变量分配给环境变量,例如

"scripts": {
    ...
    "migrate_dev": "DATABASE_URL=DEV_DB_URL NODE_ENV=dev node-pg-migrate",
    ...
  },

但是,遗憾的是它们此时尚未定义 - #bootstraps! ;-)

How do I use environment variables or mask secrets in package.json?

I'm excluding my .env file in .gitignore to ensure my secrets don't leak into the git repo.

因为您的秘密在您的 .env 文件中,所以它们只能通过编程方式访问,而 package.json 本身没有这种能力。这需要一个 .js 文件。

您可以从您的 migrate_dev 脚本 运行 一个 .js 文件(即 migrate_dev.js):

"migrate_dev": "node migrate_dev.js"

migrate_dev.js 中,您应该可以访问 .env 文件和 node-pg-migrate 的程序化 API(它的 CLI 等价于 JS):

https://salsita.github.io/node-pg-migrate/#/api