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

почему я должен запустить "npm install" дважды, чтобы мой пакет успешно установился

В первый раз, когда я "npm install" package_1, я получаю следующую ошибку.

npm ERR! path C:\Users\john_\Documents\GitHub\why_npm_nesting_fails\package_1\node_modules\.staging\bignumber.js-55edd243

Я не использую "bignumber", поэтому предположим, что это зависимость от MySQL. Второй раз, когда я "npm install" package_1, он проходит.

added 2 packages and audited 30 packages in 0.722s

Это как-то связано с mysql, так как после удаления этой зависимости все работает с первого раза.

Вот диаграмма зависимостей:

enter image description here

Урезанный проект можно найти по адресу https://github.com/johngrabner/why_npm_nesting_fails. Только 4 файла package.json по 7 строк в каждом, включая {}, демонстрируют эту проблему. то есть: 4 файла с 1 строкой каждый, что демонстрирует эту проблему.

Эта проблема мешает мне аккуратно поместить мой проект в Docker-контейнеры, так как первая "установка npm" не удалась. Обходной путь установки "package_4", затем установки "package_3" и т.д. Работает, но я боюсь, что не понимаю, что вернется и укусит меня.

Вышеуказанная проблема возникает как в Windows, так и в Docker Node: 9.4.

4b9b3361

Ответ 1

Вы обязательно должны всегда хранить свой package-lock.json.

Вот хорошее описание этого файла и его полезность: package-lock.json - манифест манифеста

Важными моментами являются:

  • Опишите единственное представление дерева зависимостей, чтобы товарищи по команде, развертывания и непрерывная интеграция гарантированно устанавливали точно такие же зависимости

а также

  • Оптимизируйте процесс установки, позволяя npm пропускать повторяющиеся разрешения метаданных для ранее установленных пакетов

Удаляя этот файл, вы (вроде) путаете NPM.

Проще сохранить файл package-lock.json, чем заниматься всеми проблемами, которые появятся, если вы этого не сделаете :)


Пакет-lock.json

"Этот файл предназначен для размещения в исходных хранилищах"

(https://docs.npmjs.com/files/package-lock.json)