Конфигурация сборки

Stencil — это мощный инструмент для создания веб-компонентов, который предоставляет гибкую систему конфигурации для настройки процесса сборки. Основные настройки Stencil происходят через файл stencil.config.ts, где можно задать параметры для различных аспектов разработки и сборки приложения. Конфигурация сборки позволяет настраивать такие аспекты, как цели сборки, входные файлы, плагины, оптимизацию и много других параметров, которые напрямую влияют на производительность и результаты работы.

Конфигурационный файл

Для начала работы с Stencil проектом необходимо создать файл конфигурации. Это файл TypeScript, который должен экспортировать объект с настройками. Вот базовая структура конфигурационного файла:

import { Config } from '@stencil/core';

export const config: Config = {
  namespace: 'my-component-library',
  globalStyle: 'src/global/style.css',
  plugins: [],
  outputTargets: []
};

Основные параметры конфигурации

1. namespace

Параметр namespace задает уникальное имя для вашего проекта. Это имя используется для генерации имен файлов и классов, что важно, когда вы работаете с несколькими проектами в одном окружении. Название должно быть уникальным и соответствовать стилю именования в вашем проекте.

namespace: 'my-component-library',

2. globalStyle

globalStyle указывает на глобальный CSS файл, который будет применяться ко всем компонентам проекта. Это может быть файл с общими стилями для всей библиотеки компонентов или стилями для всего приложения.

globalStyle: 'src/global/style.css',

3. plugins

В Stencil можно использовать плагины для расширения возможностей сборки. Плагины могут добавить новые этапы обработки файлов, оптимизацию, интеграцию с внешними инструментами и прочее. Параметр plugins позволяет передавать массив плагинов для выполнения на стадии сборки.

Пример использования плагинов:

plugins: [
  sass(),
  postcss({
    plugins: [autoprefixer()],
  }),
]

4. outputTargets

outputTargets — это массив, в котором задаются параметры для различных типов вывода сборки: создание компонентов для использования в веб-страницах, создание библиотек для использования в других проектах, генерация документации и т.д. Это одна из самых важных частей конфигурации, поскольку она определяет, как будут собираться и публиковаться компоненты.

Пример конфигурации для вывода компонентов в несколько форматов:

outputTargets: [
  {
    type: 'dist',
    esmLoaderPath: '../loader',
  },
  {
    type: 'www',
    serviceWorker: null,
    prerenderConfig: './prerender.config.ts',
  },
]

Поддержка нескольких целей сборки

Stencil позволяет легко настраивать проект для создания компонентов, которые могут быть использованы в различных средах. Для этого можно настроить несколько целей сборки, каждая из которых будет генерировать различные форматы вывода. Например, можно собрать компоненты как библиотеку, а также создать отдельные версии для использования в различных фреймворках или для простого использования в HTML.

Пример:

outputTargets: [
  {
    type: 'dist',
    esmLoaderPath: '../loader',
  },
  {
    type: 'www',
    serviceWorker: null,
  },
]

В этом примере у нас два выходных формата: один для создания библиотеки компонентов, другой — для простого размещения на веб-странице.

Параметры оптимизации

Stencil предоставляет возможность настроить различные аспекты оптимизации, такие как минимизация кода, сжатие ресурсов и удаление неиспользуемого кода. Это помогает улучшить производительность и уменьшить размер финальной сборки.

1. minifyJs

Если необходимо минимизировать JavaScript код, можно использовать параметр minifyJs, который включит или отключит сжатие JS файлов.

minifyJs: true,

2. removeUnusedCss

Stencil также поддерживает удаление неиспользуемого CSS, что позволяет уменьшить размер итогового файла стилей, удаляя все классы и селекторы, которые не используются.

removeUnusedCss: true,

3. optimizeJs

Этот параметр включает дополнительные оптимизации для JavaScript кода, такие как удаление мертвого кода, сокращение имен переменных и прочее.

optimizeJs: true,

Конфигурация для тестирования

Stencil также позволяет настроить тестирование компонентов. Для этого используется фреймворк Jest, который интегрирован в Stencil по умолчанию. В конфигурации можно указать, как запускать тесты и какие параметры использовать.

Пример:

testing: {
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  globals: {
    'ts-jest': {
      tsconfig: 'tsconfig.test.json',
    },
  },
}

Пре- и постобработка

Stencil позволяет использовать различные этапы пред- и постобработки для улучшения качества и производительности сборки. Это может включать такие задачи, как транспиляция кода, проверка типов, копирование файлов и т.д.

Пример конфигурации с плагинами для TypeScript и PostCSS:

plugins: [
  typescript({
    tsconfig: './tsconfig.json',
  }),
  postcss({
    plugins: [autoprefixer()],
  }),
],

Настройки для различных окружений

В Stencil можно настроить параметры для различных окружений, таких как разработка, тестирование и продакшн. Это позволяет гибко настроить сборку в зависимости от требований.

Пример конфигурации для разных окружений:

buildEs5: 'prod',
devMode: process.env.NODE_ENV !== 'production',

Здесь параметр buildEs5 настраивает, будет ли проект собираться с поддержкой старых браузеров, а devMode включает или отключает режим разработки в зависимости от переменной окружения.

Конфигурация для интеграции с внешними сервисами

Stencil также поддерживает интеграцию с различными сервисами и инструментами для улучшения процесса сборки и публикации. Например, можно настроить автоматическую отправку сборок в хранилища, интеграцию с CI/CD системами, настройку сервис-воркеров для оффлайн-режима и многое другое.

Заключение

Конфигурация сборки в Stencil — это мощный инструмент, который позволяет настроить проект для любых нужд. С помощью параметров конфигурации можно контролировать поведение сборки, настраивать цели вывода, оптимизацию, тестирование и интеграцию с внешними сервисами. Эти возможности делают Stencil гибким и удобным фреймворком для разработки современных веб-компонентов.