在yarn package.json中使用环境变量

Kar*_*ler 3 heroku bitbucket environment-variables npm yarnpkg

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

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

"dependencies": {
    "@companyName/repository": "git+https://${$BITBUCKET_USER}:${BITBUCKET_APP_PASSWORD}@bitbucket.org/company name/repository.git",
Run Code Online (Sandbox Code Playgroud)

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

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

Olu*_*ule 8

您可以编写一个使用环境中的值进行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"
}
Run Code Online (Sandbox Code Playgroud)

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));
Run Code Online (Sandbox Code Playgroud)

奖金:

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

  • 刚刚验证,这很好用。很好的方法,只是不应该在本地使用它,否则文件也会在本地被覆盖 (2认同)