4-значное управление версиями в npm
Я удивлен, что 4-значное управление версиями не разрешено в экосистеме npm:
https://docs.npmjs.com/about-semantic-versioning
Однако мне нужно объединить мой конечный продукт из npm в другие системы, где разрешено 4 цифры. Итак, мой вопрос:
(как) мы можем как-то сделать исключение для наших собственных проектов, чтобы использовать 4 цифры?
2 ответа
Вы можете сделать это, но вам нужно заменить последний
.
с . Однако это нестандартно, и вам, вероятно, следует убедиться, что вы соблюдаете версию npm, если вы хотите загрузить туда свой проект (я не думаю, что это может что-то сломать, но все же хорошо поддерживать согласованность версии на платформе. )
Например. ваша версия будет выглядеть
1.1.1-1
.
Я видел в нем другие проекты для альфа-версий и т. Д., И он также допускает нестандартные номера версий. Несколько примеров из npm:
-
vue-class-component@8.0.0-rc.1
-
react-docgen@3.0.0-beta7
Однако имейте в виду, что при использовании любого из
npm version major / minor / patch
команды, это число сначала не будет увеличиваться, а просто обрезать все, начиная с первого
-
персонаж. Пример:
1.0.6-1
1.0.6
npm version patch
1.0.7
Я думаю, это связано с тем, что обычно люди используют его, чтобы пометить версию, которая будет включена.
alpha / beta / rc
в этом порядке, и когда версия является окончательной, вы сохраняете номер версии, но удаляете суффикс.
Чтобы автоматизировать это, вам нужно будет создать собственный cli управления версиями, который знает, как обращаться с вашей конкретной схемой управления версиями.
Прямой ответ на ваш вопрос квалифицированный да. Некоторые полуверы, поддерживающие пакет / инструменты управления версиями, допускают строки с четырьмя числовыми версиями, но они не могут анализировать их в полях и должны использовать сравнение строк или выдавать ошибку при сравнении, что обычно не требуется при сравнении строк версии. Другими словами, вы теряете семантику, которая должна быть закодирована в четырех полях версии. (См. Тему Принуждения для описания поведения NPM в этом случае)
Преобразования могут быть возможны, но обычно их трудно получить правильно:
Семантика различных схем версий полей 1, 2, 3, 4,...n варьируется, даже если количество полей совпадает. Там, где есть строка версии, такая как "1.1.1", которая корректно переводится в другую схему как "1.1.1", семантика двух схем одинакова, или "1.1.1" является особым случаем. Там, где количество полей варьируется, возможно, что набор полей меньшей схемы может быть расположен с фиксированным смещением в пределах полей более крупных схем (с постоянными значениями для оставшихся полей). Также может быть возможно извлечь подмножество больших полей схем, чтобы перенести их в меньшие поля схем. В любом случае невозможно иметь одну строку версии, которая работает как в схеме большего, так и меньшего размера, не нарушая семантику одной или обеих схем.
Перевод из одной схемы в другую требует глубокого понимания семантики обеих схем. Многие из четырехзначных схем являются, по сути, полумесяцами с дополнительным счетчиком сборок:
X.Y.Z.B
X is major or breaking changes.
Y is minor or non-breaking feature changes.
Z is patch or non-breaking changes that do not add features.
B counts from zero after the last X/Y/Z change.
Перевод с такой схемы на semver невозможен без всей истории выпуска X'.Y'.Z'.0
- X'.Y'.Z'.n
и некоторые средства обнаружения новых функций и создания разрывов между любыми n
а также n+1
, В таких случаях, как Nuget/.NET, вы можете заблокировать поле B до нуля и применить semver к оставшимся полям, тогда перевод из Neget/.Net включает удаление дополнительного поля, а из semver - добавление .0
к версии.
Либо примите Семвер, либо не принимайте. Если нет, вам просто придется мириться с различными инструментами, кричащими о ваших несовместимых строках версий.