2015-11-23 1 views
0

Часто при использовании npm Я столкнулся с ошибками, которые, как представляется, ничего не значат - проекты Visual Studio, неспособные строить, создавать инструменты (например: python.exe/CL.exe), недоступны в командной строке и т. Д.Почему успех NPM, когда подмодули не удается построить?

Некоторые примеры пакетов, которые я видел, не строить много раз:

  • Kerberos
  • узел-лавочка
  • Bcrypt

Они вызывают большие сообщения об ошибках со следами стека и т. Д. На консоль в течение npm install, явно провалившись полностью; Тем не менее, NPM носит счастливый Ларри и 9 раз из 10 моих приложений Javascript, и все его зависимости работают нормально.

  1. ли npm install заново строить каждую зависимость рекурсивно, используя любые компиляторы доступны на локальной машине?

  2. Если да, и учитывая огромное количество зависимостей, которые могут иметь даже простые пакеты, как я могу делать НИЧЕГО без полного набора языков программирования и компиляторов?

  3. Почему все эти зависимости не всегда означают, что мой последний проект будет непригодным для использования?

  4. Если зависимость, неспособная построить, «нормально», зачем вообще иметь зависимость?

Я не смог найти четкие ответы на все это, из-за подавляющего количества ресурсов, найденных при поиске таких терминов, как «НПМ сборки не в состоянии».

+0

npm не определяет, что находится в модуле; лично я делаю все возможное, чтобы избежать модулей, которые приводят к тяжелым требованиям зависимости или не предлагают соответствующего пакета, - но это не связано с самим часом. – user2864740

+0

Да ... но некоторые общие вещи имеют массивные деревья зависимостей; например, создание пустого проекта и установка webpack создает дерево из 149 пакетов! Конечно, это много ... но мне нравится webpack. –

ответ

3

npm будет успешным, если эти зависимости действительно отмечены как необязательные. Модуль ws является примером этого, где они имеют необязательные зависимости от двух компилятивных аддонов. Если они не могут построить, то ws просто использует резервные реализации pure js.

Причина, по которой добавление иногда добавляется в качестве необязательных зависимостей, заключается в том, что они (чаще всего) выполняют быстрее, чем чистые js-альтернативы, даже для чего-то как «простого», как проверка UTF-8 или XOR'ing содержимого буфера.

+0

Я понимаю о дополнительных зависимостях - это был не мой вопрос ... –

+0

Мой ответ прямо или косвенно отвечает на все 4 ваших вопроса. Чтобы расширить ответ на ваш первый вопрос, 'npm install' перестроит ваши зависимости. – mscdex

+0

Отмечу, что вы добавили больше информации к своему ответу со времени моего последнего комментария; однако многие неудачные пакеты (например, [kerberos] (https://www.npmjs.com/package/kerberos) и [node-gyp] (https://www.npmjs.com/package/node-gyp)) являются а не просто «более быстрые альтернативы» для таких вещей, как проверка UTF8. Спасибо за ваш ответ, но «потому что они не являются обязательными», это не тот ответ, который я ищу. –

 Смежные вопросы

  • Нет связанных вопросов^_^