2016-03-30 6 views
1

В моих приложениях JavaScript я могу объявить несколько десятков зависимостей в файле package.json.Используйте последнюю крупную версию

Пройти через каждую из этих зависимостей потребуется некоторое время и посмотреть, в какой версии они находятся.

Я просто хочу сказать: используйте последнюю крупную версию, но не кровоточащую кромку.

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

Есть ли аналогичная концепция при указании версии модуля npm?

+0

«кровотечения края», как правило, куча исправлений ошибок вы, вероятно, хотите иметь. – ceejayoz

+0

@ceejayoz Это, вероятно, просто мое незнание ландшафта, но как это отличается от других инструментов, таких как инструменты управления версиями или браузеры, где я обычно не забочусь (или не хочу) вещей на краю кровотечения? –

+0

Другим примером является модуль, подобный 'grunt'. Я просто хочу стабильную версию, а не кровоточащую грань, которая (я считаю) не должна быть такой же стабильной? –

ответ

2

НПМ-пакеты (теоретически) используют SemVer.

В SemVer пакеты получают номер версии X.Y.Z.

Z указывает на исправления ошибок. Y обозначает новые функции без изменения существующих. X обозначает основную версию, которая нарушает обратную совместимость.

Выполнение npm install --save <package> приведет к версии строки в вашем package.json как ^2.3.9, что означает «что-нибудь в 2.* диапазоне, большем или равном 2.3.9». Это будет означать, что вы получите исправления ошибок и неиспользуемые новые функции, но вы не будете неожиданно обновлены до версии 3.0.0, которая нарушит ваше приложение.

Примечание: Я говорю «теоретически», потому что не каждый придерживается идеала SemVer. Вы можете найти обновление 2.3.9 -> 2.3.10, которое время от времени ломает вещи. Тесты здесь удобны.

1

Использование npm i -S <pkg> должно нормально поступать правильно.

Несколько предостережений:

  • выше предполагает, если вы принимаете зависимость времени выполнения от <pkg>. В установке инструментов разработчика (например, grunt) использовать -D или -G вместо -S.

  • Semantic versioning rule 9 говорит, что издатели МОГУТ идентифицировать предварительные версии с использованием суффикса, такого как -beta. Npm зависит от него, поэтому, если пакет издателя FAILS для этого, вы можете зависеть от пакета до выпуска, не зная об этом. Сложные издатели npm должны знать лучше, а опытные потребители npm должны проверять документацию.

  • Основная версия «» указывает, что пакет все еще находится в начальной разработке, и пакет НЕ ДОЛЖЕН считаться стабильным. (Semantic versioning rule 4.)

  • Рассмотрите возможность использования npm dist-tag ls <pkg>, чтобы увидеть, если есть какие-то пакет конкретных теги, который идентифицирует ваше намерение лучше, чем latest. Если это так, используйте npm I -S <pkg>@<tag>, чтобы отслеживать этот тег.

Вы всегда можете использовать npm outdated, чтобы проверить, если вы зависимые от непосредственно на пакете с новым выпуском может рассмотреть вопрос о переходе на. Поэтапное обновление основной версии не происходит автоматически.

+0

Пакет 'npm' сам использует теги dist-tag' s, чтобы увидеть этот тип ** 'npm dist-tag ls npm' **. Если это не сработает, перейдите на «последнюю» (стабильную) сборку npm, набрав ** npm i -G npm' **. –