2016-10-27 11 views
0

Я разрабатываю систему сборки для интерфейсных разработчиков с использованием сценариев npm, и несколько задач были определены в разделе scriptspackage.json. Они включают в себя типичные задачи, такие как: Минимизация CSS, код пылеобразование, генерирующая документация, transpiling JavaScript ... и т.д. и т.п.npm скрипты не работают после переустановки пакетов, перечисленных в devDependecies

Всех задачи сценария, определенных достижения ожидаемых результатов путем выполнения команд с помощью интерфейса командной строки, например, $ npm run build$ npm run docs, $ npm run watch ...

Чтобы проверить, что система сборки может быть успешно воспроизведена после свежей установки необходимых узлов пакетов, которые я делаю это:

  1. сделать дубликат директории проекта.
  2. удалите папку node_modules из дублированного каталога проектов.
  3. выполнить новую установку в дублированном каталоге проекта через $ npm install.

Это, как и ожидалось, загружает необходимые пакеты узла на основе тех, которые перечислены в devDependencies разделе package.json.

Однако после запуска нового npm install некоторые из заданий скрипта, таких как: $ npm run watch, больше не работают успешно из проекта обмана.

Дальнейшие исследования показали, что нет. пакетов верхнего уровня, перечисленных в папке «node_modules» в каталоге дубликатов проектов (т. е. после новой установки), примерно на 30 меньше, чем исходный каталог проекта, из которого успешно выполняются задачи. Пакеты, отсутствующие, как представляется, зависят от субзависимости, от которой зависят установленные пакеты.

Кроме того, при запуске $ npm list через CLI, как в исходной директории проекта, так и в каталоге обманутых проектов (т. Е. В новой версии) указанные пакеты отличаются.

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

Буду признателен за любые рекомендации по устранению этой проблемы. Это не то, с чем я столкнулся раньше.

Заранее спасибо.

ответ

1

Я предполагаю, что у вас есть ваши версии диапазоны указаны свободно в вашем package.json^, ~ или *). Исходный каталог содержит устаревшие версии. Когда вы запускаете npm install в новом каталоге, устанавливается более поздняя (и несовместимая) версия (с разными зависимостями).

Чтобы проверить, перейдите в исходный каталог и запустите npm outdated. Это даст вам список всех устаревших зависимостей вместе с установленной текущей версией, последней версией, разрешенной диапазонами версий, в package.json и последним номером версии пакета.Как это:

$ npm outdated 
Package      Current Wanted Latest Location 
eslint       1.10.3 1.10.3 3.9.1 postcss-import 
eslint-config-i-am-meticulous 2.0.0 2.0.0 5.0.2 postcss-import 
pkg-resolve      0.1.14 0.1.14 0.2.2 postcss-import 
postcss-scss      0.1.9 0.1.9 0.4.0 postcss-import 

Если какие-либо из номеров версий Current и Wanted отличается, новая установка в новом каталоге приведет к различным версиям устанавливаются.

Большинство пакетов npm используют SemVer. Если вы не используете * для номера версии в своем package.json, вы должны быть в безопасности от нарушения изменений в большинстве случаев. Тем не менее, авторы пакетов являются людьми, а иногда и беспорядками. Есть также несколько пакетов npm, которые не следуют semver. Эти пакеты либо не должны использоваться, либо их номера версий должны быть закреплены.

Может быть полезно, если вы разместите раздел devDependencies вашего package.json.