Программирование HTML Vue: условная компиляция Wed, September 02 2026  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Vue: условная компиляция Печать
Добавил(а) microsin   

Условная компиляция для Vue/JavaScript устроена не также просто, как на C/C++, но все же кое-какие возможности для этого есть. Для реализации исключения некоторых блоков кода можно использовать разные подходы, описанные далее как Вариант 1, Вариант 2, Вариант 3, Вариант 4.

[Вариант 1: плагин vite-plugin-conditional-compiler]

Самый простой способ — использовать плагин, который работает с Vite, например vite-plugin-conditional-compiler.

1. Установка, в корне Vue-проекта выполните команду:

$ npm install -D vite-plugin-conditional-compiler
added 8 packages, and audited 628 packages in 12s
210 packages are looking for funding run `npm fund` for details
21 vulnerabilities (1 low, 3 moderate, 15 high, 2 critical)
To address issues that do not require attention, run: npm audit fix
To address all issues (including breaking changes), run: npm audit fix --force
Run `npm audit` for details. npm warn allow-scripts 3 packages have install scripts not yet covered by allowScripts: npm warn allow-scripts @parcel/watcher@2.5.4 (install: node-gyp rebuild) npm warn allow-scripts esbuild@0.21.5 (postinstall: node install.js) npm warn allow-scripts vue-demi@0.14.10 (postinstall: node -e "try{require('./scripts/postinstall.js')}catch(e){}") npm warn allow-scripts npm warn allow-scripts Run `npm approve-scripts --allow-scripts-pending` to review, or `npm approve-scripts < pkg>` to allow.

2. Настройка vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import conditionalCompiler from 'vite-plugin-conditional-compiler'

export default defineConfig({
plugins: [
vue(),
conditionalCompiler({
// Определяем переменные для условной компиляции
defines: {
// В продакшене исключаем блок SOME_CODE
INCLUDE_SOME_CODE: process.env.VITE_INCLUDE_SOME_CODE !== 'false'
, // Или можно использовать явный флаг
// SOME_CODE_ENABLED: true // или false
}
})
] })

3. Теперь в любом месте JavaScript кода можно использовать директивы #if следующим образом:

//#if INCLUDE_SOME_CODE
import SomeCode from '@/views/SomeCode.vue'
//#endif

[Вариант 2: плагин rollup-plugin-conditional-compilation]

1. Установка:

npm install -D rollup-plugin-conditional-compilation

2. Настройка vite.config.js:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import conditional from 'rollup-plugin-conditional-compilation'

export default defineConfig({
plugins: [vue()],
build: {
rollupOptions: {
plugins: [
conditional({
debug: false,
// Определяем переменные
variables: {
SOME_CODE_ENABLED: process.env.VITE_SOME_CODE_ENABLED !== 'false' // по умолчанию true
}
})
]
}
} })

Далее можно использовать все те же операторы #if, как Варианте 1:

//#if SOME_CODE_ENABLED
import SomeCode from '@/views/SomeCode.vue'
//#endif

[Вариант 3: плагин @rollup/plugin-replace]

Если вам нужно только удалить целый блок, можно использовать простой подход с плагином @rollup/plugin-replace.

1. Установка:

npm install -D @rollup/plugin-replace

2. Настройка vite.config.js:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import replace from '@rollup/plugin-replace'

export default defineConfig({
plugins: [
vue(),
replace({
// Включаем/выключаем SOME_CODE через переменную окружения
__SOME_CODE_ENABLED__: JSON.stringify(process.env.SOME_CODE_ENABLED !== 'false'),
preventAssignment: true
})
] })

3. Пример применения:

// ... остальной код
routes: [
// ... другие маршруты
__SOME_CODE_ENABLED__ && {
path: '/somecode',
name: 'somecode',
component: SomeCode, },
// ... остальные маршруты ].filter(Boolean) // Убираем false элементы

[Запуск компиляции с разными конфигурациями]

Для сборки без SOME_CODE:

# Вариант 1
VITE_INCLUDE_SOME_CODE=false npm run build

# Вариант 2 и 3
SOME_CODE_ENABLED=false npm run build

Для сборки с SOME_CODE (по умолчанию):

npm run build

[Дополнительные советы]

1. Для разработки вы можете оставить SOME_CODE включенным, а исключать только в продакшене:

// vite.config.js
conditionalCompiler({
defines: {
INCLUDE_SOME_CODE: process.env.NODE_ENV === 'development' // Только в разработке
} })

2. Проверьте результат после сборки — откройте собранный файл и убедитесь, что блок с /somecode полностью отсутствует.

3. Не забудьте импортировать SomeCode только внутри условного блока, чтобы избежать ошибок "неиспользуемый импорт".

[Вариант 4: без использования плагина]

Это самый надежный способ для Vite, работающий без дополнительных плагинов.

1. Создайте файл .env в корне проекта со следующим содержимым:

VITE_ENABLE_SOME_CODE=false

2. В коде JavaScript используйте:

// Переменная VITE_ENABLE_SOME_CODE доступна напрямую в JS:
const isSomeCodeEnabled = computed(() => import.meta.env.VITE_ENABLE_SOME_CODE === 'true')

После этого используйте условную компиляцию для добавления или исключения нужного кода (config.js или любой другой JS файл):

// Условный импорт
let SomeCodeView;
if (isSomeCodeEnabled) {
SomeCodeView = () => import('@/views/SomeCodeView.vue'); }

// Условное добавление в массив
const routes = [
{ path: '/', component: HomeView },
{ path: '/settings', component: SettingsView },
// ... другие маршруты ];

if (isSomeCodeEnabled) {
routes.push({
path: '/somecode',
name: 'somecode',
component: SomeCodeView,
}); }

4. В шаблоне HTML используйте v-if для динамического управления содержимым страницы, например:

< li v-if="isSomeCodeEnabled" class="nav-item">
   < SomeCodeLink to="/somecode" class="nav-link" active-class="active">
     Ссылка на SomeCode< /SomeCodeLink>
< /li>

Вариант 1 с vite-plugin-conditional-compiler наиболее стабильно работает с Vite и поддерживает синтаксис #if/#endif, который чище выглядит в коде. Мне подошел вариант 4.

[Ссылки]

1. Vue 3, быстрый старт.

 

Добавить комментарий


Защитный код
Обновить

Top of Page