CDN (Content Delivery Network) используется для быстрой и эффективной доставки статических ресурсов приложений, созданных на Stencil. В контексте Stencil это особенно актуально для Web Components, поскольку их можно распространять как отдельные модули без привязки к конкретному фреймворку.
Stencil предоставляет гибкую систему сборки через
stencil.config.ts, где можно настроить оптимизированные
пути к статическим ресурсам. Основной параметр для конфигурации CDN —
outputTargets. Пример базовой настройки для публикации на
CDN:
import { Config } from '@stencil/core';
export const config: Config = {
namespace: 'mycomponents',
outputTargets: [
{
type: 'dist',
esmLoaderPath: '../loader',
},
{
type: 'www',
serviceWorker: null,
baseUrl: 'https://cdn.example.com/mycomponents/',
},
],
};
Ключевые моменты:
baseUrl указывает на корень CDN, где будут доступны
файлы сборки.esmLoaderPath важен для правильной загрузки модулей ES
при использовании CDN.После сборки с CDN-конфигурацией, веб-компоненты можно подключать
напрямую через тег :
Stencil автоматически генерирует необходимые файлы для обоих вариантов, что обеспечивает совместимость с широким спектром устройств.
При использовании CDN важно минимизировать размер и количество
запросов. Для этого в stencil.config.ts можно включить
следующие опции:
buildEs5: true,
minifyJs: true,
minifyCss: true,
buildEs5: true — создаёт совместимую с ES5 версию для
старых браузеров.minifyJs и minifyCss — минимизация кода
для ускорения загрузки.Кроме того, Stencil поддерживает lazy-loading
компонентов, что позволяет загружать только те модули, которые реально
используются на странице. Настройка выполняется через
outputTargets с указанием lazy:
outputTargets: [
{
type: 'dist',
esmLoaderPath: '../loader',
copy: [
{ src: '**/*.css' },
{ src: '**/*.png' }
],
},
{
type: 'www',
serviceWorker: null,
baseUrl: 'https://cdn.example.com/mycomponents/',
dir: 'www',
},
]
Для удобства обновления компонентов через CDN рекомендуется включать версионные пути:
https://cdn.example.com/mycomponents/v1.0.0/mycomponents.esm.js
Это предотвращает конфликты между различными версиями и позволяет безопасно разворачивать обновления без нарушений работы существующих приложений.
CDN обычно предоставляет механизмы контроля кэширования через HTTP-заголовки. Для компонентов Stencil полезно включать:
Cache-Control: max-age=31536000, immutable — для
неизменяемых версий.ETag — для проверки актуальности файлов.Такая конфигурация снижает нагрузку на сервер и ускоряет доставку компонентов пользователям.
CDN-версии компонентов легко интегрируются с серверным рендерингом
(SSR) и популярными фреймворками (React, Angular, Vue) через адаптеры.
Важно, чтобы baseUrl совпадал с фактическим расположением
скриптов на CDN, иначе динамическая загрузка модулей не сработает.