Скрипты npm не работают после переустановки пакетов, перечисленных в devDependecies

Я разрабатывал систему сборки для разработчиков интерфейса с использованием сценариев npm, и несколько задач были определены в разделе scripts файла package.json. К ним относятся типичные задачи, такие как: минимизация css, анализ кода, генерация документации, транспиляция JavaScript… и т. д., и т. д.

Все определенные задачи сценария достигают ожидаемых результатов, выполняя команды через интерфейс командной строки, например $ 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 через интерфейс командной строки как в исходном каталоге проекта, так и в каталоге дублированного проекта (то есть в каталоге с новой установкой) перечисленные пакеты различаются.

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

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

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


person RobC    schedule 27.10.2016    source источник


Ответы (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.

person RyanZim    schedule 08.11.2016