Публикация пакета в npm

January 4, 2020 · 2 min read

В процессе вынесения темы моего блога в отдельный пакет в 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 можно посмотреть здесь.