2017-10-06 13 views
1

Je veux tirer d'un paquet privé hébergé sur bitbucket. Comme SSH n'est pas une option pour ma configuration de déploiement, je veux accéder au dépôt en utilisant le mot de passe de l'application.Utilisez les variables d'environnement dans le paquetage.json

donc mon entrée dans le package JSON ressemble à ceci:

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

nom d'utilisateur de codage et mot de passe difficile dans l'URL repo fonctionne très bien, mais quand je joue yarn install comme ci-dessus, les variables d'environnement ne sont pas remplacées par ses valeurs .

Est-il possible d'utiliser des variables d'environnement comme celle-ci?

+0

Post complet 'package.json' et votre' Procfile', cela aurait probablement besoin d'une solution de contournement –

Répondre

4

Vous pouvez écrire un crochet preinstall qui met à jour package.json avec des valeurs provenant de l'environnement. Heureusement, l'ordre des crochets de cycle de vie fonctionne comme prescrit en utilisant 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 exemple:

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:

Comment vous choisissez de remplacer les variables d'environnement dans preinstall.js est laissée à votre bon jugement. Oui, vous pouvez utiliser totalement les balises de modèle ES6.

+1

Juste vérifié et cela fonctionne très bien. Bonne approche, juste qu'on ne devrait pas l'utiliser localement, sinon le fichier sera écrasé en local aussi –