2017-10-06 174 views
1

我想從託管在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',這可能需要一個解決方法 –

回答

4

您可以編寫一個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

剛剛驗證,這工作很好。偉大的方法,只是不應該在本地使用它,否則該文件將在本地覆蓋 –