2017-10-06 2 views
1

Ich möchte aus einem privaten Paket auf Bitbucket gehostet werden. Da SSH für mein Bereitstellungssetup keine Option ist, möchte ich mit dem Anwendungspasswort auf das Repo zugreifen.Verwenden Sie Umgebungsvariablen in Garn package.json

So JSON mein Eintrag im Paket sieht wie folgt aus:

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

Coding Benutzername und Passwort hart in die Repo-URL funktioniert gut, aber wenn ich yarn install wie oben durchführen, werden die Umgebungsvariablen nicht durch ihre Werte ersetzt .

Gibt es eine Möglichkeit, Umgebungsvariablen wie diese zu verwenden?

+0

Post komplett 'package.json' und Ihre' Procfile', würde dies wahrscheinlich eine Umgehung benötigen –

Antwort

4

Sie können einen preinstall Hook schreiben, der package.json mit Werten aus der Umgebung aktualisiert. Glücklicherweise funktioniert die Reihenfolge der Lebenszyklus-Hooks wie unter yarn beschrieben.

{ 
    "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 Beispiel:

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)); 

Bonus:

Wie Sie wählen, um die Umgebungsvariablen in preinstall.js bleibt auf Ihr gutes Urteilsvermögen zu ersetzen. Ja, Sie können ES6-Vorlagen-Tags vollständig verwenden.

+1

Nur verifiziert und das funktioniert gut. Toller Ansatz, nur dass man ihn nicht lokal verwenden sollte, sonst wird die Datei auch lokal überschrieben –

Verwandte Themen