Popular Science: почему npm не устанавливается на сервер?

Node.js внешний интерфейс Egg.js NPM

## задний план

Node.js прост и удобен для начала работы. Но в нем также не хватает многих спецификаций, а уровень пользователей неравномерный.

Вопрос, который я часто вижу в последнее время:很多新手,在部署的时候,是直接在服务器上 npm install, это действительноНе рекомендуетсяиз.


## Существующие проблемы

1. Невозможно определить уникальность

Поскольку установка занимает много времени в большой сети, поэтомуВы даже не можете гарантировать случай кластера, на двух серверахnpm installПакет, который пришел, был точно таким же.

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

Конечно, чтобы решить эту проблему, многие люди выбирают решение «версия блокировки».

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

Учитывая, что «версия блокировки» принадлежит"Проблема велосипеда дерьмового цвета", не хочу здесь обсуждать.
Смотрите наши взгляды на:«Знай колонку - Мертвая лошадь: почему бы мне не использовать термоусадочную пленку (замок)».

2. Долго выходит в интернет и быстро не откатывается

После того, как я вышел в интернет, я обнаружил онлайн-ошибку, и когда я хотел быстро откатиться, чтобы остановить кровотечение, я был ошеломлен:

  1. Нужно дождаться установки зависимостей, на случай джиттера в сети,Правильная ошибка P4 становится ошибкой P0., премия в конце года исчезла.
  2. Если проблема вызвана базовыми зависимостями, откат бесполезен.
  3. npm cacheЭто не может решить проблему, например, когда машина расширяется.

## Рекомендуемые решения

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

其中,关键点是:在构建期就把依赖打包进去。

преимущество:

  • Его можно запустить сразу после распаковки, не дожидаясь сетевого времени.
  • Можно гарантировать, что его можно запустить, потому что зависимости определяются и гарантируются модульным тестом CI.
  • Его можно быстро откатить, чтобы остановить кровотечение.
  • Способ упаковки может быть tar или docker. (рекомендуется последний)

недостаток:

  • Сумка громоздкая (но на самом деле хранение не стоит денег...)
Зная, что качество просмотра изображения плохое, пожалуйста, нажмите на увеличенное изображение, чтобы сделать его более четким.
Изображение выше используетсяPlantUMLРисование в Yuque, если вы хотите использовать возможности Markdown для рисования блок-схем, используйте PlantUML

## Как реализовать?

Тогда некоторые студенты спросят: я небольшая компания, в отличие от вас, у которой есть эта инфраструктура для обслуживания, что мне делать?

На самом деле, стоимость очень низкая:

  • Репозиторий кода GitLab поставляется с CI, вам нужно только написать файл конфигурации, чтобы запустить автоматическую сборку. (или Дженкинс)
  • Затем сохраните созданные файлы в таком месте, как OSS.
  • Если сервер развернут, лучше всего иметь систему выпуска операций и обслуживания.Если нет, напишите оболочку для загрузки и распаковки файла OSS.
  • Конечно, многие облачные сервисы поддерживают образы Docker, что проще.

## Рекламная площадка

  • Чтобы получить больше удовольствия от чтения, посетитеЯзыковой воробей издание.
  • Если вам понравилась моя статья, подписывайтесьмоя чжихуа такжеFollow GitHub
  • Игра Гуанчжоу Али, рекрутинговый интерфейс, знакомый с динамическими эффектами, скорость узла ~