在yarn package.json中使用环境变量
问题描述:
我想从托管在bitbucket上的私有包中提取数据。由于SSH不适用于我的部署安装,因此我想使用应用程序密码访问回购站。在yarn package.json中使用环境变量
所以我在包JSON条目看起来是这样的:
"dependencies": {
"@companyName/repository": "git+https://${$BITBUCKET_USER}:${BITBUCKET_APP_PASSWORD}@bitbucket.org/company name/repository.git",
编码的用户名和密码难成回购URL工作正常,但当我执行yarn install
如上,环境变量没有被它的值替换。
有什么办法可以像这样使用环境变量吗?
答
您可以编写一个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模板标签。
+1
刚刚验证,这工作很好。伟大的方法,只是不应该在本地使用它,否则该文件将在本地覆盖 –
发布完成'package.json'和你的'Procfile',这可能需要一个解决方法 –