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

在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如上,环境变量没有被它的值替换。

有什么办法可以像这样使用环境变量吗?

+0

发布完成'package.json'和你的'Procfile',这可能需要一个解决方法 –

您可以编写一个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

刚刚验证,这工作很好。伟大的方法,只是不应该在本地使用它,否则该文件将在本地覆盖 –