Публикация пакета в npm
В процессе вынесения темы моего блога в отдельный пакет в npm, я составил небольшой список полезных команд и утилит, необходимых для удобной публикации пакета.
И сразу же спойлер: для базовой публикации пакета (то есть, чтобы пакет попал в https://registry.npmjs.org/, достаточно авторизоваться в npm и опубликовать пакет:
cd your_npm_package
...
npm adduser
...
npm publish
Так я и поступил, а когда решил прикрутить тулзу для генерации файла CHANGELOG.md, понял, что у меня абсолютно не настроены теги в git и любая тулза генерит описание последней версии, так как ничего не знает про прошлые версии.
Для начала зайдем в папку с пакетом и там выполним:
git log --pretty=oneline
Это покажет в удобном виде все коммиты. В соседнем окне терминала я выполнил:
git tag
Эта команда покажет все теги репозитория. Так как тегов нет, список будет пустой. Приступим к созданию тегов.
git tag -a v1.0.0 686f9b7b94c92c3e1845562ad59961a3c3772350
Локально создан тег v1.0.0
, связанный с указанным нами хешом коммита. Важно помнить, что 1 тег = 1 коммит. То есть если у нас было три коммита с изменениями после последнего тега, то для добавления в новый тег всех трех коммитов, нужно указать последний.
По умолчанию обычный git push
не отправляет теги в удаленный репозиторий. Для того, чтобы увидеть теги, например, на github, нужно сделать так:
git push origin v1.0.0
Чтобы отправить сразу несколько тегов:
git push origin --tags
Это была организационная часть, теперь можно заняться созданием простого CHANGELOG.md. Здесь я не стал заморачиваться с conventional changelog, а создал простейший файл, который просто описывает изменения в релизе, без разбиения на фиксы и фичи. Возможно, это будет сделано в дальнейшем.
Для создания файла изменений я использовал утилиту auto-changelog. Можно поставить ее как дев-зависимость или как глобальный пакет. У меня она стоит как глобальный пакет:
yarn global add auto-changelog
//или
npm i -g auto-changelog
Для создания файла с изменениями я просто выполняю в консоли:
auto-changelog -p
Для большего удобства и автор пакета и я рекомендуем всё же ставить этот пакет как дев-зависимость, а также прописать в скриптах пакета в package.json
:
"scripts": {
"version": "auto-changelog -p && git add CHANGELOG.md"
}
Пример готового CHANGELOG.md можно посмотреть здесь.