Внедрение НОГО механизма установки модуля, то почему бы ввести НПЙ установить соответствующий модуль может быть установлен автоматически?

1. НПМ модуль крепления механизмов:

  • Проблема npm installкоманды
  • Есть ли конкретный модуль в справочном node_modules
    • Если нет больше не будет повторно установить
    • Если
      • URL НПМ модуля запроса реестра сжатого пакета
      • Скачиваем архив, хранящийся в корневой директории .npmкаталога
      • Распаковка архива в текущий проект node_modulesкаталога

Принцип реализации 2. НПМ

После ввода НОЙ установки команды и Qiaoxia Enter, пройти через следующие этапы (с НПМ 5.5.1, например):

  1. Реализация самого проекта предустанавливать

Если текущий НПМ проекта определен предустанавливать крюк на этот раз будет выполняться.

  1. модуль определения зависимостей Первый этаж

Прежде всего нужно сделать, это определить проект зависимого на первом этаже, то есть зависимость и devDependencies свойство непосредственно указанный модуль (при условии, без добавления НОГО не устанавливать параметры).

Сам проект представляет собой целое зерно-зависимой корень дерева, каждый модуль зависит от первого этажа суб-дерева ниже корневого узла, НПМ будет открыт процесс с несколькими узлами начал постепенно найти более глубокий уровень от каждого модуля зависит от первого этажа.

  1. модуль сбора

Модуль сбора является рекурсивный процесс, разделенный на следующие этапы:

  • модуль информации Acquisition. Перед загрузкой модуля, мы должны сначала определить версию, это часто, потому что package.json семантическая версия (semver, семантический вариант). На данный момент, если есть модуль информации о версии Описание файла (NPM-shrinkwrap.json или пакет-lock.json), вы можете сразу принять, если не получить со склада. Такие, как версия packaeg.json в пакете, что ^ 1.1.0, НПЙ будут идти на склад, чтобы получить самую последнюю версию формы согласия 1.xx.
  • Приобретение модуль сущность. Previous'll добраться до модуля архива адреса (разрешено поле), НПЙ проверят локальный кэш с этим адресом, кэш должен взять прямой, если нет загрузки со склада.
  • Найти модуль зависит, если есть зависимость от возврата к шагу 1, если нет, то остановиться.
  1. Сведение модуль (как дедупликации)

Приобретенный на предыдущем этапе является полным деревом зависимостей, которые могут содержать большое количество повторных модулей. Модуль зависит от такого loadsh, В модуле также зависит от lodash. Будет зависеть строго в соответствии с древовидной структурой, установленной в npm3 раньше, это приведет к избыточности модуля.

С самого начала npm3 умолчанию вступил в процесс в дедупликации. Он будет обходить все узлы ниже корневого узла в модуле по одному, т.е. первый слой узлов-модулей. Когда модуль был найден дубликат, он отбрасывается.

Это должно быть определением повторяющихся модулей, которые относятся к тому же имени модуля и semver совместимы. Каждый период соответствует semver допустимой версии диапазона, если версия из двух модулей, чтобы диапазон пересечения существует, то он может получить совместимую версию, и номер версии не должен быть идентичным, которые могут сделать более избыточные модули удалены в процессе дедупликации ,

Например модуль lodash зависимости @ Foo узловые-модули ^ 1.0.0, lodash@^1.1.0 бар модуля зависимости ^ является совместимой версией 1.1.0.

Когда Foo полагаться lodash @ ^ 2.0.0, бар в зависимости lodash@^1.1.0, то в соответствии с правилами semver, оба из которых нет совместимой версии. Это будет версия на node_modules, а другой остается зависимой от дерева.

Например, предположим, что это было первоначально дерево зависимостей:

node_modules
- Foo
---- lodash @ version1

- бар
---- lodash @ version2

предположения и Version2 Version1 совместимы версии, после дедупликации будут следующие формы:

node_modules
- Foo

-- бар

- lodash (зарезервирован версия совместимая версия)

Пусть version1 version2 и несовместимая версия, версия остаются в задней части дерева зависимостей:

node_modules
- Foo
- lodash @ version1

- бар
---- lodash @ version2

  1. Установка модуля

Этот шаг будет обновлять node_modules проекта, а также модуль выполнения в жизненном цикле функции (в Preinstall порядка, установить постустановочные ы).

  1. Реализация самого жизненного цикла проекта

Если определить текущий крючок проект НОГО на этот раз выполняется (по установке, постустановочный, prepublish, подготовить заказ).

Заключительный шаг, чтобы генерировать или более поздней версии профиля, НПМ процесс установки будет завершен.

Ссылка http://www.ruanyifeng.com/blog/2016/01/npm-install.html

https://www.bbsmax.com/A/qVdemmnEdP/

https://www.zhihu.com/question/66629910

рекомендация

отwww.cnblogs.com/wangxi01/p/11202584.html