Я пытаюсь создать приложение для реагирования, но когда я выполняю команду 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
но это не работает. В чем проблема?
Вы нашли решение этой проблемы? Я выполнил все инструкции во всех связанных вопросах и т. д., И я ничего не получил
@JSilv посмотри мой ответ: stackoverflow.com/a/55610638/5922757
Здесь вы можете найти мое решение stackoverflow.com/a/67648863/14178236





Для пользователей Ubuntu из Google:
Простое решение: rm -f ./.npmrc (удаление файла .npmrc)
Однако, если вы не хотите удалять файл, вы можете просто удалить эту строку кода из файла .npmrc.
Строка кода: //registry.npmjs.org/:_authToken=${NPM_TOKEN} (Удалите этот код)
Худший вариант развития событий:
nano ~/.bash_aliases или nano ~/.bash_profileexport NPM_TOKEN = "XXXXX-XXXXX-XXXXX-XXXXX"Это не решение, а обходной путь. Правильным решением было бы удалить эту строку и обновить конфигурацию развертывания CI, например npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" && npm publish.
Мне не хватает причины этого решения, было бы неплохо иметь его.
Если вы удалите эту строку из файла, как тогда вы получите доступ к частному репо?
второе решение сработало для меня
Следует повторить, что приведенное выше не является решением, а худший вариант развития событий в том виде, в котором он описан, является жизнеспособным решением в некоторых обстоятельствах.
Если вы впервые установили свой ~ / .profile (OSX, Ubuntu) и добавили эту строку: export NPM_TOKEN = "XXXXX-XXXXX-XXXXX-XXXXX". Затем вы должны ввести эту строку в терминал после этого:
source ~/.profile
это решение работает для меня, я использую ubuntu
Обновите конфигурацию развертывания 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}" вызывало у меня ту же ошибку из заголовка. Решено только с использованием первого обходного пути в принятом ответе.
Этот подход приведет к утечке "$ {NPM_TOKEN}" любому пользователю на машине, способному перечислять процессы и их аргументы, например. с ps, pgrep и т. д.
добавлен в Jenkinsfile и работает как шарм! Это именно то, что я искал! Ваше здоровье!
@WadeJensen Если вы боитесь передавать конфиденциальную информацию в качестве параметров команды, возможно, ваша среда CI / CD недостаточно безопасна. То, что вы описали, потребует постоянного мониторинга процессов и их аргументов, npm config set выполняется довольно быстро, чтобы человек мог уловить точный момент его запуска. Это означает, что у вас есть пользователь со злонамеренными намерениями, имеющий доступ к вашей машине… В любом случае, вы можете использовать другую команду для записи токена в конфигурационный файл npm (тот, который не использует аргументы командной строки).
@ alexlomba87 каково содержимое вашего файла .npmrc? Возможно, вы устанавливаете буквально ${NPM_TOKEN} вместо переменной окружения?
@Jezor: многие разработчики работают над многопользовательскими внутренними системами, которые находятся за корпоративными брандмауэрами, но слабо защищены от внутренних пользователей. Вы хотите, чтобы ваша модель безопасности была «везде хрустящей», а не «твердой оболочкой снаружи и мягкой внутри».
@WadeJensen Значит, мы согласны! Только несколько пользователей-администраторов должны иметь доступ к внутренним компонентам CI / CD (SSH / admin), разработчики должны видеть только результаты конвейера. Тем не менее, вы можете совершить тест, который просто считывает .npmrc и извлекает токен - есть определенный момент, когда добавление дополнительных ограничений больше не повышает безопасность.
@funtik, поскольку этот ответ получил большую поддержку, не могли бы вы пометить его как принятый? Текущий принятый ответ вводит в заблуждение.
У меня есть простое решение этой проблемы. После того, как вы установили свой NPM_TOKEN глобально в своей среде, замените
//registry.npmjs.org/:_authToken=${NPM_TOKEN}
с
//registry.npmjs.org/:_authToken=$NPM_TOKEN
У меня это хорошо сработало на macOS Catalina.
Это исправило запуск из командной строки (я тоже macOS Catalina), однако он не работал с различными CI.
Я читал, что рекомендованное решение было просто «обходным путем», и даже второе порекомендованное решение было небезопасным. Я также работаю на macOS Catalina, и ваше решение мне понравилось. Это кажется лучшим решением, поскольку оно не ставит под угрозу безопасность и не является временным решением.
Моей проблемой было запустить 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»> «Переменные».
Возможный дубликат Не удалось заменить env в конфигурации с помощью Bash и NPM