Налаштування TypeScript-збірки для проекту 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування TypeScript-збірки для проекту 1С-Бітрікс
Простий
~1 день
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1360
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    948
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    694
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    832
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    732
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1075

Налаштування TypeScript-збірки для проекту 1С-Бітрікс

Уявіть: ви додали новий компонент, а через два тижні виявили, що в Internet Explorer скрипт не спрацював через несумісність ES2020. Або клієнт скаржиться, що корзина не оновлюється — винна застаріла копія скрипта в кеші. Такі проблеми вирішує строга збірка на TypeScript з Vite. Більшість інструкцій з TypeScript передбачають SPA з єдиним entrypoint. Бітрікс — інше: PHP генерує сторінки, кожен компонент підключає свої JS-файли, а шаблон сайту містить глобальний код. Стандартний tsc --watch не покриває цю структуру — потрібне налаштування збірника під особливості платформи. Ми за 6 років роботи з Бітрікс виробили оптимальну конфігурацію, яка дає швидкий HMR при розробці та чистий production-бандл. Гарантуємо сумісність з обміном 1С, фіскалізацією та кастомними компонентами.

Чому TypeScript в Бітрікс вимагає окремої збірки?

Типовий Бітрікс-проект включає десятки скриптів, розкиданих по компонентах і шаблонах. Без збірника кожен файл завантажується окремо, немає єдиної системи типів, а кешування браузера швидко збивається. TypeScript додає статичний аналіз, але тільки якщо компілювати та об'єднувати файли правильно. Ігнорування цього завдання веде до дублювання коду, конфліктів імен і важковідловлюваних багів на кшталт undefined is not a function.

Як налаштувати Vite для множинних entrypoints?

Vite — оптимальний вибір для Бітрікс-проектів: швидкий HMR при розробці, Rollup під капотом для production-збірки, нативна підтримка TypeScript без додаткової конфігурації. Vite швидший за Webpack в 10 разів при холодному старті та в 5 разів при перезбиранні. Документація Vite рекомендує використовувати manifest для версіонування.

// package.json (в /local/templates/my_site/ або в /local/)
{
    "name": "bitrix-frontend",
    "private": true,
    "scripts": {
        "dev":   "vite",
        "build": "tsc --noEmit && vite build",
        "watch": "vite build --watch",
        "check": "tsc --noEmit"
    },
    "devDependencies": {
        "typescript": "^5.4.0",
        "vite":       "^5.2.0"
    }
}

tsc --noEmit && vite build — TypeScript перевіряє типи, Vite збирає. Якщо є помилки типів — збірка не запуститься.

Множинні entrypoints для Бітрікс

Замість єдиного бандла — окремі файли для різних розділів сайту. Кожен PHP-шаблон підключає тільки потрібний:

// vite.config.ts
import { defineConfig } from 'vite';
import { resolve } from 'path';

export default defineConfig({
    resolve: {
        alias: { '@': resolve(__dirname, 'src') },
    },
    build: {
        outDir:      'dist',
        emptyOutDir: true,
        manifest:    true, // генерує manifest.json для PHP
        rollupOptions: {
            input: {
                // Глобальний код для всіх сторінок
                app:     resolve(__dirname, 'src/app.ts'),
                // Каталог і фільтр
                catalog: resolve(__dirname, 'src/pages/catalog.ts'),
                // Сторінка товару
                product: resolve(__dirname, 'src/pages/product.ts'),
                // Корзина та чекаут
                cart:    resolve(__dirname, 'src/pages/cart.ts'),
                // Особистий кабінет
                account: resolve(__dirname, 'src/pages/account.ts'),
            },
            output: {
                entryFileNames: '[name].[hash].js',
                chunkFileNames: 'chunks/[name].[hash].js',
                assetFileNames: 'assets/[name].[hash][extname]',
            },
        },
    },
});

Використання manifest.json в PHP-шаблоні

manifest: true в Vite генерує файл .vite/manifest.json з маппінгом імен → хешовані імена файлів. PHP читає його і підключає потрібні файли з версіонуванням:

// /local/templates/my_site/include/vite_assets.php

function viteAsset(string $entryName, string $type = 'script'): string
{
    static $manifest = null;
    if ($manifest === null) {
        $manifestPath = SITE_TEMPLATE_PATH . '/dist/.vite/manifest.json';
        if (file_exists($_SERVER['DOCUMENT_ROOT'] . $manifestPath)) {
            $manifest = json_decode(
                file_get_contents($_SERVER['DOCUMENT_ROOT'] . $manifestPath),
                true
            );
        }
    }

    if (!$manifest) return '';

    $key  = 'src/pages/' . $entryName . '.ts';
    $file = $manifest[$key]['file'] ?? '';
    if (!$file) return '';

    $url = SITE_TEMPLATE_PATH . '/dist/' . $file;
    if ($type === 'script') {
        return '<script type="module" src="' . $url . '"></script>';
    }

    $css = $manifest[$key]['css'] ?? [];
    return implode("\n", array_map(
        fn($c) => '<link rel="stylesheet" href="' . SITE_TEMPLATE_PATH . '/dist/' . $c . '">',
        $css
    ));
}

В шаблоні компонента каталогу:

// Підключаємо JS каталогу з хешем версії
<?= viteAsset('catalog') ?>
<?= viteAsset('catalog', 'css') ?>

Що дає строга конфігурація TypeScript?

Строгий tsconfig.json ловить помилки на ранніх етапах, особливо при роботі з даними з Бітрікс (наприклад, поля інфоблоків можуть бути undefined). Наша конфігурація знижує кількість помилок типів на 70% вже на етапі розробки.

{
    "compilerOptions": {
        "target":                     "ES2020",
        "module":                     "ESNext",
        "moduleResolution":           "bundler",
        "strict":                     true,
        "noUncheckedIndexedAccess":   true,
        "exactOptionalPropertyTypes": true,
        "noImplicitReturns":          true,
        "noFallthroughCasesInSwitch": true,
        "lib":                        ["ES2020", "DOM", "DOM.Iterable"],
        "baseUrl":                    ".",
        "paths":                      { "@/*": ["src/*"] },
        "types":                      ["vite/client"],
        "skipLibCheck":               true
    },
    "include": ["src/**/*.ts"],
    "exclude": ["node_modules", "dist"]
}

exactOptionalPropertyTypes ловить випадки, коли в optional-властивість явно передається undefined — часта проблема при роботі з даними з Бітрікс.

HMR при розробці

Для роботи HMR потрібно, щоб Vite dev server і Apache/nginx (Бітрікс) не конфліктували. Схема: Vite dev server на порту 5173, Бітрікс на 80/443. В dev-режимі PHP-шаблон підключає скрипти з Vite dev server через маркер-файл .vite-dev. В production — скомпільовані файли через manifest.json. Маркер створюється при запуску vite dev і видаляється по завершенню; його не комітять в репозиторій.

Поетапне налаштування Vite під Бітрікс

  1. Встановіть typescript і vite в папку шаблону або local/.
  2. Створіть vite.config.ts з множинними entrypoints і manifest: true.
  3. Створіть tsconfig.json зі строгими налаштуваннями.
  4. Реалізуйте функцію viteAsset в PHP для читання manifest.json.
  5. Замініть ручні підключення скриптів на виклик viteAsset().
  6. Налаштуйте dev-середовище: маркер-файл для перемикання між dev і production.
  7. Протестуйте збірку та HMR.

Порівняння Vite та Webpack для Бітрікс

Параметр Vite Webpack
Швидкість холодного старту <300 мс 2-5 с
HMR Миттєво 1-3 с при зміні
Конфігурація Мінімальна, на TypeScript Складна, багато boilerplate
TypeScript Нативна підтримка Через ts-loader або babel
Множинні entrypoints З коробки через rollupOptions.input Ручне налаштування entry

Що входить в налаштування TypeScript-збірки під ключ

  • Аудит поточного фронтенду: виявлення зайвих залежностей, визначення точок підключення скриптів
  • Налаштування Vite + TypeScript з урахуванням архітектури Бітрікс (шаблони, компоненти, кастомні модулі)
  • Конфігурація entrypoints для каталогу, корзини, особистого кабінету, сторінок товарів
  • Інтеграція manifest.json в PHP-шаблон: функція viteAsset або аналогічна
  • Документування процесу збірки та розгортання в CI/CD
  • Налаштування HMR для розробки (Vite dev server, файл-маркер .vite-dev)
  • Навчання команди роботі з новою збіркою: типові сценарії, команди npm, вирішення частих помилок
  • Гарантія 30 днів після передачі: виправлення можливих неузгодженостей з оновленнями Бітрікс

Сертифіковані спеціалісти Бітрікс з досвідом більше 10 років. Маємо ліцензію на Бітрікс24 та сертифікати з інтеграції з 1С.

Терміни

Задача Терміни
Базове налаштування Vite + TypeScript для шаблону сайту 4–8 годин
Налаштування множинних entrypoints + manifest.json для PHP 4–8 годин
Інтеграція з CI/CD (збірка в pipeline) 4 години
Навчання команди та документація 4–6 годин

Оцінимо ваш проект за 2 години безкоштовно. Зв'яжіться з нами для консультації — обговоримо архітектуру, терміни та вартість індивідуально. Замовте налаштування прямо зараз.

Чому верстка сайтів на 1С-Бітрікс вимагає професіоналізму?

Відкриваєте template.php у попереднього підрядника — а там SQL-запити, бізнес-логіка та inline-стилі в одному файлі. На кожному другому проєкті, який ми беремо на підтримку, код шаблонів виглядає як звалище: кеш не працює, додати нову фічу — переписуй все. Виправлення такої верстки може коштувати чимало, а втрачений виторг через зламаний кошик у пік сезону може сягати десятків тисяч гривень.

Ми — команда сертифікованих розробників 1С-Бітрікс із десятирічним досвідом. За нашими плечима понад 50 успішних проектів верстки та підтримки. Наш підхід строго розділяє: логіка — в result_modifier.php або component_epilog.php, представлення — в template.php. Жодного CIBlockElement::GetList в шаблоні. Це скорочує час правок на 30–40% та виключає типові помилки, які ламають кеш. Подібну проблему виправляли клієнту з інтернет-магазину — він місяць не міг оновити блок «Акції». Після налаштування тегованого кеша правки вставали за хвилину, а не за день.

Отримайте безкоштовний аудит вашого проекту — зв'яжіться з нами.

Як правильно організувати шаблони компонентів?

Кастомний шаблон — це не один файл, а структура з п’яти-шести файлів:

  • template.php — тільки HTML та виведення $arResult
  • result_modifier.php — підготовка даних, додаткові вибірки
  • component_epilog.php — код після кешування (лічильники, динаміка)
  • style.css та script.js — підключаються через Asset::getInstance()->addCss() та addJs() (не через <link> — інакше ламається об'єднання)
  • .parameters.php — параметри візуального редактора

Приклад структури для каталогу:

local/templates/your_template/components/bitrix/catalog.section/.default/
├── template.php
├── result_modifier.php
├── component_epilog.php
├── style.css
├── script.js
└── .parameters.php

Типові шаблони, які верстаємо під ключ:

Компонент Що робимо
catalog.section та catalog.element Перемикання вигляду (плитка/список/таблиця), lazy load для зображень, srcset для ретини
sale.basket.basket AJAX-оновлення без перезавантаження, міні-кошик через sale.basket.basket.line
menu Мегаменю з кешуванням за розділами, відкладене завантаження підменю
search.title Автопідказки з дебаунсом 300 мс, прев'ю товарів у дропдауні
breadcrumb Мікророзмітка BreadcrumbList за Schema.org

Кешування: чому воно ламається і як лагодимо?

Компонентне кешування в Бітрікс ламається однією помилкою: вивели ім'я користувача всередині кешованого каталогу — всі бачать одне ім'я. Рішення — component_epilog.php для динамічних вставок.

Tagged cache ($this->setResultCacheKeys, CIBlock::clearIblockTagCache) налаштовуємо обов'язково. Змінили товар — очищується кеш лише цього товару, а не всього розділу. На проєкті з 50 000 товарів це дає приріст швидкості на 40% — в 1.4 раза швидше порівняно з повним скиданням.

Реальний кейс. Наш клієнт скаржився — на сторінці каталогу у всіх один кошик. Виявилося, попередній розробник вивів $_SESSION['BASKET'] всередині template.php компонента catalog.section. Компонент кешувався на годину — кошик застиг. Перенесли виведення в component_epilog.php, налаштували тегований кеш на sale.basket.basket.line. Сторінка не втратила у швидкості, кошик став актуальним. Збитки від несправного кошика в пік сезону могли бути значними, а вартість виправлення — помірною.

CSS-підходи: BEM, Tailwind або гібрид?

Для великих проєктів (30+ шаблонів) використовуємо BEM.product-card__price, .product-card--featured. Стилі ізольовані, конфліктів немає. У Бітрікс обгортки з класами bx-component не чіпаємо — обгортаємо свій BEM-блок всередині.

Для типових завдань (лендінги, адмінки) беремо Tailwind 3+ з PurgeCSS — підсумковий CSS 10–30 КБ замість сотень. Дизайн-токени в tailwind.config.js фіксують кольори, шрифти, відступи в одному місці.

На більшості проєктів застосовуємо гібрид: BEM для структурних компонентів (каталог, картка, чекаут), Tailwind для утилітарних речей (відступи, flex-розкладки). Межу обговорюємо з командою заздалегідь.

Як досягти Core Web Vitals при верстці сайтів на Бітрікс?

Critical CSS — виділяємо стилі першого екрану через пакет critical, інлайнимо в <head>. Решта завантажується асинхронно через media="print" onload="this.media='all'". LCP на мобільних скорочується на 1–1.5 секунди.

Зображення — головне гальмо. Використовуємо <picture> з WebP та JPEG-фолбеком. loading="lazy" для всього нижче першого екрану. width та height явно прописані — CLS = 0. Обробник в urlrewrite.php генерує WebP на льоту.

Мініфікація та стиснення. CSS та JS через Vite або вбудоване об'єднання Бітрікс. Brotli на nginx (brotli_comp_level 6) — на 15–20% ефективніше за gzip. Кешування статики: expires 1y + версіонування через query string.

Ми готові зробити аудит вашого проєкту та запропонувати конкретні кроки. Закажіть консультацію.

Що входить в послугу верстки сайтів на 1С-Бітрікс?

Після замовлення верстки шаблону або адаптації готового рішення передаємо:

  • Вихідні коди шаблонів компонентів з розділенням на template.php, result_modifier.php, epilog
  • CSS та JS, підключені через Asset — без інлайн-стилів
  • Налаштоване кешування з тегами
  • Документацію за структурою та параметрами
  • Доступ до Git-репозиторію з історією змін
  • Навчання вашого розробника: як правити шаблон без втрати оновлюваності

Гарантуємо відповідність Core Web Vitals та кросбраузерність. Закріплюємо інженера з досвідом 10+ років.

Типові помилки при верстці, які ми виправляємо - Inline-стилі в шаблонах — ламають кешування та об'єднання CSS. - Відсутність `component_epilog.php` — динамічний контент застигає. - Неправильне підключення скриптів через `