【问题标题】:Use enviroment variables in yarn package.json在 yarn package.json 中使用环境变量
【发布时间】:2018-03-18 05:16:28
【问题描述】:

我想从托管在 bitbucket 上的私有包中提取。由于 SSH 不是我的部署设置的选项,我想使用应用程序密码访问存储库。

所以我在 JSON 包中的条目如下所示:

"dependencies": {
    "@companyName/repository": "git+https://${$BITBUCKET_USER}:${BITBUCKET_APP_PASSWORD}@bitbucket.org/company name/repository.git",

将用户名和密码硬编码到 repo URL 可以正常工作,但是当我如上所述执行 yarn install 时,环境变量不会被其值替换。

有没有办法像这样使用环境变量?

【问题讨论】:

  • 发布完整的package.json 和您的Procfile,这可能需要解决方法

标签: heroku npm environment-variables bitbucket yarnpkg


【解决方案1】:

您可以编写一个 preinstall 挂钩,使用来自环境的值更新 package.json。幸运的是,生命周期钩子的顺序按照使用 yarn 的规定工作。

{
  "name": "njs",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "preinstall": "node preinstall.js"
  },
  "dependencies": {
      "@companyName/repository": "git+https://${$BITBUCKET_USER}:${BITBUCKET_APP_PASSWORD}@bitbucket.org/companyName/repository.git"
  },
  "author": "",
  "license": "ISC"
}

preinstall.js 示例:

const package = require('./package.json');
const fs = require('fs');

const {BITBUCKET_USER = 'test', BITBUCKET_APP_PASSWORD='test'} = process.env;

package.dependencies["@companyName/repository"] = package.dependencies["@companyName/repository"]
    .replace("${$BITBUCKET_USER}", BITBUCKET_USER)
    .replace("${BITBUCKET_APP_PASSWORD}", BITBUCKET_APP_PASSWORD);

fs.writeFileSync('package.json', JSON.stringify(package, null, 4));

奖励:

您如何选择替换preinstall.js 中的环境变量取决于您的判断。是的,你完全可以使用 ES6 模板标签。

【讨论】:

  • 刚刚验证,效果很好。很好的方法,只是不应该在本地使用它,否则文件也会在本地被覆盖
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2022-06-18
  • 2017-04-09
  • 2018-12-03
  • 2019-05-27
相关资源
最近更新 更多