2017-10-06 10 views
1

bitbucket에서 호스팅되는 전용 패키지에서 가져 오려고합니다. SSH는 배포 설정을위한 옵션이 아니기 때문에 애플리케이션 비밀번호를 사용하여 저장소에 액세스하려고합니다.실의 환경 변수 사용 package.json

그래서 패키지 JSON 내 항목은 다음과 같습니다 : 되찾기 URL로 하드 사용자 이름과 암호를 코딩

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

잘 작동하지만 위와 같이 yarn install을 수행 할 때, 환경 변수의 값으로 대체되지 않습니다 .

이와 같은 환경 변수를 사용할 방법이 있습니까?

+0

'package.json'과 사용자의'Procfile' 파일을 게시하면 해결 방법이 필요합니다. –

답변

4

package.json을 환경 값으로 업데이트하는 preinstall 후크를 작성할 수 있습니다. 운 좋게도 라이프 사이클 후크의 순서는 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

그냥 확인해 주시면 큰 도움이됩니다. 위대한 접근법, 그냥 로컬에서 사용해서는 안됩니다. 그렇지 않으면 파일도 로컬에서 덮어 씁니다. –