Что происходит при удалении пакета npm? - PullRequest
0 голосов
/ 05 февраля 2019

Я читал статью о том, как автор популярного пакета npm (левый блокнот) вызывал разрыв приложений после удаления своего пакета.

Как это могло быть?Разве код пакета npm не загружается локально, когда вы npm install --save?Единственный случай, когда я представляю, что это проблема, - это для тех, кто использовал проект через CDN.Верны ли мои предположения?

Источник: https://www.theregister.co.uk/2016/03/23/npm_left_pad_chaos/

1 Ответ

0 голосов
/ 05 февраля 2019

В большинстве проектов фактические модули не передаются в систему контроля версий

Папка node_modules обычно не загружается в систему контроля версий, такую ​​как Git или SVN.Очень часто это огромная папка, и каждый раз было бы громоздко толкать / тянуть ее.

Кроме того, некоторые модули содержат код C ++ и компилируются при установке в ОС пользователя.У меня может быть другая ОС, чем у пользователя, который ее установил, поэтому этот модуль не будет работать, если я слепо скачал его собственную скомпилированную версию этого модуля из системы контроля версий.

Вместо небольшой конфигурации.включается файл типа package.json, который описывает , какие модули требуются для проекта.Когда вы запускаете $ npm install, менеджер пакетов ( npm или yarn ) затем читает этот файл и начинает загрузку модулей, на которые он ссылается.

Каждый раз, когда проект получаетразвернутый или клонированный, машина загружает исходный код из своего хранилища, но без модулей (так как они не находятся под контролем исходного кода), а затем человек или машина запускают $ npm install, чтобы также получить зависимый /необходимые модули.

Проекты постоянно развертываются и создаются

Теперь проекты развертываются на удаленных серверах постоянно ;т.е. развертывание проекта на рабочем сервере или его тестирование на удаленном CI-сервере или даже клонирование других разработчиков на их локальных машинах.Проекты, над которыми я работаю, развертываются и тестируются на удаленном CI-сервере как минимум 5 раз в день;каждый раз, когда мы помещаем коммит в удаленный репозиторий.

Поскольку этот пользователь удалил свой сильно зависимый модуль, многие из $ npm install по всему миру начали давать сбои.Многие люди не могли загружать обновления в проекты на своем производственном сервере, другие разработчики не могли загрузить проект на свою машину, чтобы они могли работать над ним и т. Д. *

В качестве защиты от этих проблем, npm представил политику , которая запрещает не публиковать модули старше 72 часов:

с npm :

Данные реестра являются неизменными, то есть после публикации пакет не может быть изменен.Мы делаем это по соображениям безопасности и стабильности пользователей, которые зависят от этих пакетов.Поэтому, если вы когда-либо публиковали пакет с именем «bob» в версии 1.1.0, никакие другие пакеты с таким именем не могут быть опубликованы в этой версии.Это верно, даже если этот пакет не опубликован.Однако из-за несчастных случаев мы предоставили пользователям 72-часовое окно для отмены публикации только что созданных пакетов.

...