@astral/pack v1.5.1
@astral/pack
Инструмент для сборки и релиза npm пакетов:
- Собирает пакеты в esm и cjs
- Копирует статичные файлы
- Генерирует package.json
- Semantic-release
- Проверяет актуальную версию пакета
- Создает релиз в gitlab и тэг в git
Installation
npm i --save @astral/utils
yarn add @astral/utils
Build
pack.config.js
const { defineConfig } = require('@astral/pack');
module.exports = defineConfig({
target: 'web',
// Сборка в esm и cjs
format: ['esm', 'cjs'],
tsConfigName: 'tsconfig.build.json',
// Скопирует файлы в lib директорию
copyStaticFiles: {
filter: ['src/**/*.d.ts'],
ignoreSrc: true,
},
// Добавит к root exports дополнительный
packageExports: {
'./server': {
module: './server/index.js',
require: './node/server/index.js',
types: './server/index.d.ts',
},
},
});
pack build --package-version=1.0.0
Build в связке с sematic-release
Запишет в .pack/versions.json
новую версию пакета на основе анализа коммитов:
pack check-package-version
Заберет новую версию пакета из .pack/versions.json
pack build
Создание релиза в git и gitlab
pack create-release
Создаст git тэг и релиз в gitlab.
Exports
По-дефолту добавляет exports вида:
{
'.': {
module: './index.js',
require: './node/index.js',
types: './index.d.ts'
},
}
Для добавления доп. exports необходимо использовать packageExports
в pack.config.js
:
module.exports = {
packageExports: {
'./server': {
module: './server/index.js',
require: './node/server/index.js',
types: './server/index.d.ts',
},
},
};
Синхронный релиз пакетов
Для того чтобы deps пакета были синхронизированы с основным пакетом необходимо использовать semanticRelease.releaseGroup
:
module.exports = {
semanticRelease: {
repositoryUrl: 'https://git.astralnalog.ru/frontend.shared/pack',
releaseGroup: ['@astral/validations'],
},
};
@astral/validations
будет иметь после сборки ту же версию, что и основной пакет.
Удаление свойств package.json
Для удаления свойств package.json необходимо использовать omitPackageJsonProps
:
module.exports = defineConfig({
...config,
omitPackageJsonProps: ['engines'],
});
Результирующий package.json не будет содержать engines
.
Отправка уведомлений в telegram
Отправляет в telegram уведомление об успешном релизе пакета:
pack send-telegram-success-release --telegram-bot-token=$TELEGRAM_ASTRAL_UI_BOT_TOKEN --telegram-chat-id=$TELEGRAM_RELEASES_CHANNEL_ID
Пример сообщения:
🚀 Опубликован @astral/pack версии: 1.0.0
👀 Changelog:https://git.astralnalog.ru/frontend.shared/pack/-/releases/v1.0.0
Отправляет в telegram уведомление об ошибке релиза пакета:
pack send-telegram-fail-release --telegram-bot-token=$TELEGRAM_ASTRAL_UI_BOT_TOKEN --telegram-chat-id=$TELEGRAM_RELEASES_CHANNEL_ID --telegramPipelineUrl=$CI_PIPELINE_URL
Пример сообщения:
‼️Ошибка релиза @astral/pack
https://git.astralnalog.ru/frontend.shared/pack/-/pipelines/270356