92 votes

NPM - Échec du remplacement de env dans la configuration : ${NPM_TOKEN}

J'essaie de construire une application react, mais lorsque j'exécute la commande npm -i il me donne l'erreur suivante :

Error: Failed to replace env in config: ${NPM_TOKEN}
    at /usr/local/lib/node_modules/npm/lib/config/core.js:415:13
    at String.replace (<anonymous>)
    at envReplace (/usr/local/lib/node_modules/npm/lib/config/core.js:411:12)
    at parseField (/usr/local/lib/node_modules/npm/lib/config/core.js:389:7)
    at /usr/local/lib/node_modules/npm/lib/config/core.js:330:24
    at Array.forEach (<anonymous>)
    at Conf.add (/usr/local/lib/node_modules/npm/lib/config/core.js:328:23)
    at ConfigChain.addString (/usr/local/lib/node_modules/npm/node_modules/config-chain/index.js:244:8)
    at Conf.<anonymous> (/usr/local/lib/node_modules/npm/lib/config/core.js:316:10)
    at /usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:78:16
/usr/local/lib/node_modules/npm/lib/npm.js:61
      throw new Error('npm.load() required')
      ^

Error: npm.load() required
    at Object.get (/usr/local/lib/node_modules/npm/lib/npm.js:61:13)
    at process.errorHandler (/usr/local/lib/node_modules/npm/lib/utils/error-handler.js:205:18)
    at process.emit (events.js:182:13)
    at process._fatalException (internal/bootstrap/node.js:448:27)

J'utilise MacOS High Sierra. J'ai essayé de définir NPM_TOKEN comme variable d'environnement avec la commande suivante :

set -x NPM_TOKEN = xyz

mais ça ne marche pas. Quel est le problème ?

2 votes

0 votes

Avez-vous trouvé une solution à ce problème ? J'ai suivi toutes les instructions dans toutes les questions liées, etc. et je n'ai rien trouvé.

0 votes

@JSilv voir ma réponse : stackoverflow.com/a/55610638/5922757

83voto

Première solution possible :

Une solution simple : rm -f ./.npmrc (Suppression d'un fichier .npmrc)

Deuxième solution possible :

Cependant, si vous ne voulez pas supprimer le fichier, vous pouvez simplement supprimer cette ligne de code dans le fichier d'aide. .npmrc fichier.

Ligne de code : //registry.npmjs.org/:_authToken=${NPM_TOKEN} (Supprimer ce code)

Troisième solution possible

Dans le pire des cas :

  • nano ~/.bash_aliases o nano ~/.bash_profile
  • ajouter export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX"
  • CTRL + X pour quitter
  • Y pour sauvegarder

72voto

Jezor Points 1229

En fait, la solution appropriée

Mettez à jour votre configuration de déploiement CI :

npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
npm publish

Retirez cette ligne de la .npmrc fichier :

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

Exemple de configuration de construction

Vous pouvez voir cette solution utilisée en pratique dans l'un de mes dépôts GitHub : https://github.com/Jezorko/lambda-simulator/blob/master/.travis.yml

La variable d'environnement chiffrée est un jeton NPM.

Pourquoi les autres "solutions" ne sont que des palliatifs.

J'ai vu des réponses ici et là cette question qui recommandent de supprimer simplement la ligne de paramétrage de la variable ou .npmrc entièrement.

Le truc, c'est que .npmrc pourrait ne pas être ignoré par votre système VCS et le modifier pourrait conduire à des poussées accidentelles vers le dépôt de votre projet. En outre, le fichier peut contenir d'autres paramètres importants.

Le problème ici est que .npmrc n'autorise pas les valeurs par défaut lors de la configuration des variables d'environnement. Par exemple, si la syntaxe suivante était autorisée, le problème serait inexistant :

//registry.npmjs.org/:_authToken=${NPM_TOKEN:-undefined}

33voto

MH Rohman Masyhar Points 700

J'ai une solution facile à ce problème. Après avoir défini votre NPM_TOKEN de manière globale dans votre environnement, vous devez remplacer

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

avec

//registry.npmjs.org/:_authToken=$NPM_TOKEN

Cela a bien fonctionné pour moi sur macOS Catalina.

2 votes

Cela a permis de réparer l'exécution en ligne de commande (je suis également sous macOS Catalina), mais cela n'a pas fonctionné sur une variété de CI.

0 votes

J'ai lu que la solution recommandée n'était qu'une "solution de contournement", et que même la deuxième solution la plus recommandée n'était pas sûre. Je fonctionne également sous macOS Catalina et votre solution a bien fonctionné pour moi. Cette solution semble être la meilleure, car elle ne compromet pas la sécurité et n'est pas non plus une solution de contournement temporaire.

14voto

dang Points 528

Si vous venez de définir votre ~/.profile pour la première fois (OSX, Ubuntu) et que vous avez ajouté cette ligne : export NPM_TOKEN="XXXXX-XXXXX-XXXXX-XXXXX". Vous devez ensuite entrer cette ligne dans le terminal :

source ~/.profile

0 votes

Cette solution fonctionne pour moi, j'utilise ubuntu

6voto

Jordan Dodson Points 187

Running npm install dans un IDE (comme WebStorm) était mon problème. J'ai ajouté la variable d'environnement NPM_TOKEN à .bash_profile et redémarré mon Terminal, mais pas mon IDE ! L'IDE n'a pas pris en compte les modifications apportées à l'environnement avant que je ne le redémarre également.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X