Налаштування складання Vue.js (Webpack/Vite) для проекту 1С-Бітрікс

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

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1265
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    855
  • 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
    590
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    752
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    658
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    991

Налаштування збірки Vue.js (Webpack/Vite) для проєкту 1С-Бітрікс

Бітрікс історично жив без збирача — PHP-шаблони, CDN-підключення jQuery і плагінів, мінімальний JS у template.php. Додавання Vue змінює це: потрібна компіляція .vue файлів, транспіляція сучасного JS, розбивка на чанки, tree-shaking. Неправильно налаштована збірка дає 1 MB+ бандл на кожній сторінці або конфлікти з бітрікс-скриптами.

Vite для нових проєктів

Vite — стандарт для Vue 3-проєктів. Основні переваги в контексті Бітрікс: миттєвий dev-сервер (HMR без повного rebuild), швидка production-збірка через Rollup, вбудована підтримка TypeScript і .vue SFC.

Базова конфігурація для Бітрікс-проєкту:

// vite.config.js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';

export default defineConfig({
    plugins: [vue()],
    root: 'local/vue-src',
    build: {
        outDir: '../../local/dist',
        emptyOutDir: true,
        manifest: true,  // генерує manifest.json для PHP
        rollupOptions: {
            input: {
                catalog: 'local/vue-src/catalog/main.js',
                cart: 'local/vue-src/cart/main.js',
                lk: 'local/vue-src/lk/main.js',
            },
        },
    },
    resolve: {
        alias: { '@': path.resolve(__dirname, 'local/vue-src') },
    },
});

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

// helpers/vite.php
function viteAsset(string $entry): string {
    $manifest = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/local/dist/.vite/manifest.json'), true);
    return '/local/dist/' . $manifest[$entry]['file'];
}

// У шаблоні
\Bitrix\Main\Page\Asset::getInstance()->addJs(viteAsset('catalog/main.js'));

Dev-сервер і проксі

У development-режимі Vite запускає HMR-сервер на порту 5173. Бітрікс працює на стандартному 80/443. Проксі у vite.config.js:

server: {
    proxy: {
        '/bitrix': 'http://localhost',
        '/local': 'http://localhost',
        '/api': 'http://localhost',
    },
    https: false,
},

Тепер у браузері відкривається http://localhost:5173, Vite проксіює PHP-запити на Бітрікс. HMR працює — зміна .vue файлу застосовується без перезавантаження сторінки.

Альтернатива: запускати Бітрікс-сайт як зазвичай (http://project.loc), а Vite-скрипти підключати з dev-сервера через умову в PHP:

$isDev = getenv('APP_ENV') === 'development';
if ($isDev) {
    echo '<script type="module" src="http://localhost:5173/@vite/client"></script>';
    echo '<script type="module" src="http://localhost:5173/catalog/main.js"></script>';
} else {
    $PAGE->AddScript(viteAsset('catalog/main.js'));
}

Розбивка на чанки та оптимізація

Vue 3 runtime — ~30 KB gzip. Якщо кілька Vue-застосунків на одній сторінці використовують спільні залежності (Vue, Pinia), Rollup має винести їх у shared chunk:

rollupOptions: {
    output: {
        manualChunks: {
            'vue-vendor': ['vue', 'pinia', 'vue-router'],
        },
    },
},

vue-vendor.js завантажується один раз і кешується. Окремі застосунки (каталог, кошик) — невеликі чанки по 10–50 KB.

Webpack: коли він обґрунтований

Webpack залишається актуальним, якщо: проєкт вже використовує Laravel Mix (який Бітрікс іноді використовує як збирач), команда добре знає Webpack-конфігурацію, потрібні специфічні плагіни без Vite-аналогів.

// webpack.config.js для Бітрікс
const { VueLoaderPlugin } = require('vue-loader');
module.exports = {
    entry: { catalog: './local/vue-src/catalog/main.js' },
    output: { path: path.resolve(__dirname, 'local/dist'), filename: '[name].[contenthash].js' },
    module: {
        rules: [
            { test: /\.vue$/, loader: 'vue-loader' },
            { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ },
        ],
    },
    plugins: [new VueLoaderPlugin()],
};

Webpack повільніший за Vite у dev-режимі, але production-збірки порівнянні за розміром.

Конфлікти з бітрікс-скриптами

Бітрікс підключає jQuery через CJSCore, Vue повинен знати, що jQuery — зовнішня залежність:

// vite.config.js
build: {
    rollupOptions: {
        external: ['jquery'],
        output: { globals: { jquery: 'jQuery' } },
    },
}

Якщо Vue-компонентам не потрібен jQuery — external не потрібен, вони просто не імпортують його.

Типовий строк: базове налаштування Vite із кількома точками входу, PHP-інтеграція через manifest, налаштування dev-сервера — 1–2 робочі дні. Налаштування CI/CD пайплайну з автоматичною збіркою перед деплоєм — додатково 1 день.