Подтвердить что ты не робот

NPM - Не удалось заменить env в config: $ {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

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

4b9b3361

Ответ 1

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

Простое решение: 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, чтобы сохранить

Ответ 2

На самом деле правильное решение

Обновите конфигурацию развертывания 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}

Ответ 3

Для людей из Ubuntu, поступающих из Google:

  • nano ~/.bash_aliases
  • экспорт NPM_TOKEN = "PUT_YOUR_TOKEN_HERE"
  • CTRL + X для выхода
  • Y для сохранения

Ответ 4

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

source ~/.profile

Ответ 6

У меня была эта проблема (не удалось заменить env в $ NPM_TOKEN}) при использовании nvm (Node Version Manager) в MacOs Sierra.

Проблема была решена, когда я использовал homebrew для удаления ранее установленного узла (% brew uninstall node). Это решение может относиться только к NVM, но я надеюсь, что оно поможет кому-то приблизиться к ответу.