@astral/pack v1.2.2
@astral/pack
Инструмент для сборки и релиза npm пакетов:
- Собирает пакеты в esm и cjs- Копирует статичные файлы
- Генерирует package.json
 
- Semantic-release- Проверяет актуальную версию пакета
- Создает релиз в gitlab и тэг в git
 
Installation
npm i --save @astral/utilsyarn add @astral/utilsBuild
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.0Build в связке с 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