NPM - Не удалось заменить env в конфигурации: $ {NPM_TOKEN}

Я пытаюсь создать приложение для реагирования, но когда я выполняю команду npm -i, я получаю следующую ошибку:

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)

Я использую MacOS High Sierra. Я попытался установить NPM_TOKEN как переменную среды с помощью следующей команды:

set -x NPM_TOKEN = xyz

но это не работает. В чем проблема?

Возможный дубликат Не удалось заменить env в конфигурации с помощью Bash и NPM

Hemadri Dasari 25.08.2018 11:31

Вы нашли решение этой проблемы? Я выполнил все инструкции во всех связанных вопросах и т. д., И я ничего не получил

JSilv 02.11.2018 17:00

@JSilv посмотри мой ответ: stackoverflow.com/a/55610638/5922757

Jezor 10.04.2019 12:47

Здесь вы можете найти мое решение stackoverflow.com/a/67648863/14178236

Aman Gupta 22.05.2021 13:25
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
81
4
77 465
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Для пользователей Ubuntu из Google:

  • нано ~ / .bash_aliases
  • экспорт NPM_TOKEN = "PUT_YOUR_TOKEN_HERE"
  • CTRL + X для выхода
  • Y, чтобы сохранить
Ответ принят как подходящий

Первое возможное решение:

Простое решение: rm -f ./.npmrc (удаление файла .npmrc)

Второе возможное решение:

Однако, если вы не хотите удалять файл, вы можете просто удалить эту строку кода из файла .npmrc.

Строка кода: //registry.npmjs.org/:_authToken=${NPM_TOKEN} (Удалите этот код)

Третье возможное решение

Худший вариант развития событий:

  • nano ~/.bash_aliases или nano ~/.bash_profile
  • добавить export NPM_TOKEN = "XXXXX-XXXXX-XXXXX-XXXXX"
  • CTRL + X для выхода
  • Y, чтобы сохранить

Это не решение, а обходной путь. Правильным решением было бы удалить эту строку и обновить конфигурацию развертывания CI, например npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" && npm publish.

Jezor 10.04.2019 12:36

Мне не хватает причины этого решения, было бы неплохо иметь его.

Andrea.cabral 02.12.2019 14:10

Если вы удалите эту строку из файла, как тогда вы получите доступ к частному репо?

Kevin Genus 22.05.2020 22:26

второе решение сработало для меня

Danial 19.01.2021 17:07

Следует повторить, что приведенное выше не является решением, а худший вариант развития событий в том виде, в котором он описан, является жизнеспособным решением в некоторых обстоятельствах.

johnny 12.02.2021 00:01

Если вы впервые установили свой ~ / .profile (OSX, Ubuntu) и добавили эту строку: export NPM_TOKEN = "XXXXX-XXXXX-XXXXX-XXXXX". Затем вы должны ввести эту строку в терминал после этого:

source ~/.profile

это решение работает для меня, я использую ubuntu

Yudi Krisnandi 27.04.2021 02:53

Собственно правильное решение

Обновите конфигурацию развертывания CI:

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

Удалите эту строку из файла .npmrc:

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

Пример конфигурации сборки

Вы можете увидеть это решение на практике в одном из моих репозиториев GitHub: https://github.com/Jezorko/lambda-simulator/blob/master/.travis.yml

Зашифрованная переменная среды - это токен NPM.

Почему другие «решения» - это просто обходные пути

Я видел ответы здесь и в разделе этот вопрос, которые рекомендуют просто полностью удалить строку настройки переменной или файл .npmrc.

Дело в том, что файл .npmrc не может игнорироваться вашей системой VCS, и его изменение может привести к случайным отправкам в репозиторий вашего проекта. Кроме того, файл может содержать другие важные настройки.

Проблема здесь в том, что .npmrc не допускает использования значений по умолчанию при настройке переменных среды. Например, если бы был разрешен следующий синтаксис, проблема не существовала бы:

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

Выполнение npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" вызывало у меня ту же ошибку из заголовка. Решено только с использованием первого обходного пути в принятом ответе.

alexlomba87 16.08.2019 11:39

Этот подход приведет к утечке "$ {NPM_TOKEN}" любому пользователю на машине, способному перечислять процессы и их аргументы, например. с ps, pgrep и т. д.

Wade Jensen 20.08.2019 04:18

добавлен в Jenkinsfile и работает как шарм! Это именно то, что я искал! Ваше здоровье!

Kamil Janowski 02.09.2019 07:58

@WadeJensen Если вы боитесь передавать конфиденциальную информацию в качестве параметров команды, возможно, ваша среда CI / CD недостаточно безопасна. То, что вы описали, потребует постоянного мониторинга процессов и их аргументов, npm config set выполняется довольно быстро, чтобы человек мог уловить точный момент его запуска. Это означает, что у вас есть пользователь со злонамеренными намерениями, имеющий доступ к вашей машине… В любом случае, вы можете использовать другую команду для записи токена в конфигурационный файл npm (тот, который не использует аргументы командной строки).

Jezor 09.09.2019 09:29

@ alexlomba87 каково содержимое вашего файла .npmrc? Возможно, вы устанавливаете буквально ${NPM_TOKEN} вместо переменной окружения?

Jezor 09.09.2019 09:30

@Jezor: многие разработчики работают над многопользовательскими внутренними системами, которые находятся за корпоративными брандмауэрами, но слабо защищены от внутренних пользователей. Вы хотите, чтобы ваша модель безопасности была «везде хрустящей», а не «твердой оболочкой снаружи и мягкой внутри».

Wade Jensen 10.09.2019 07:38

@WadeJensen Значит, мы согласны! Только несколько пользователей-администраторов должны иметь доступ к внутренним компонентам CI / CD (SSH / admin), разработчики должны видеть только результаты конвейера. Тем не менее, вы можете совершить тест, который просто считывает .npmrc и извлекает токен - есть определенный момент, когда добавление дополнительных ограничений больше не повышает безопасность.

Jezor 10.09.2019 09:37

@funtik, поскольку этот ответ получил большую поддержку, не могли бы вы пометить его как принятый? Текущий принятый ответ вводит в заблуждение.

Jezor 18.07.2021 11:47

У меня есть простое решение этой проблемы. После того, как вы установили свой NPM_TOKEN глобально в своей среде, замените

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

с

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

У меня это хорошо сработало на macOS Catalina.

Это исправило запуск из командной строки (я тоже macOS Catalina), однако он не работал с различными CI.

yo.ian.g 25.01.2020 03:20

Я читал, что рекомендованное решение было просто «обходным путем», и даже второе порекомендованное решение было небезопасным. Я также работаю на macOS Catalina, и ваше решение мне понравилось. Это кажется лучшим решением, поскольку оно не ставит под угрозу безопасность и не является временным решением.

pizzae 23.04.2020 13:05

Моей проблемой было запустить npm install в IDE (например, WebStorm). Я добавил переменную среды NPM_TOKEN в .bash_profile и перезапустил свой Терминал, но не свою IDE! IDE не улавливала изменения в среде, пока я тоже не перезапустил ее.

Следующее сработало для меня. Я должен был разместить

export NVM_DIR = "$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

ПОСЛЕ строки, в которой я указываю

export NPM_TOKEN='mytoken'

В моем случае перемещение экспорта токена внутри моего .zsh (или .bash_profile) в начало файла устранило проблему, потому что раньше он был инициализирован слишком поздно.

В моем случае я просто добавляю экспорт NPM_TOKEN в ~ / .bashrc export NPM_TOKEN = 60 ______- 69 __- 44 __- be __- 2f__________ Это для bash Ubuntu 20.04

https://www.runoob.com/linux/linux-shell-variable.html заменять

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

с

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

У меня также возникает эта проблема, но я нахожу решение, когда нажимаю свое репо на Heroku, поэтому я замечаю, что Heroku запускает команду response-script start или build

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

поэтому этот синтаксис не выдает ошибки, но когда я использую тот же синтаксис в своей системе и запускаю команду, которую он мне дает. Потому что обычно, когда мы запускаем нашу систему, мы используем cmd npm или yarn, но если вы используете response-script, он не выдаст ошибку

У меня возникла эта проблема при попытке настроить задание CI / CD в Gitlab. В конце концов я обнаружил, что ошибка была вызвана тем, что переменная, которая вызывала ошибку, была установлена ​​в защищенную переменную.

Я изменил его в разделе «Настройки»> «CI / CD»> «Переменные».

Другие вопросы по теме