Библиотека Vivus распространяется в нескольких форматах, что напрямую влияет на способ интеграции в проект и процесс сборки:
<script> и через большинство
сборщиковТип подключения определяет возможности оптимизации при бандлинге, включая tree-shaking и дедупликацию зависимостей.
Минифицированная версия Vivus представляет собой результат удаления:
Файл обычно имеет суффикс:
vivus.min.js
Использование такой версии оправдано в следующих случаях:
При этом исключается этап дополнительной оптимизации, так как код уже сжат.
Современные сборщики используют ESM-версию:
import Vivus from 'vivus';
const animation = new Vivus('my-svg', {
duration: 120,
type: 'delayed'
});
ESM позволяет:
В проектах с Node.js-экосистемой:
const Vivus = require('vivus');
new Vivus('svg-element', {
duration: 80,
type: 'sync'
});
CommonJS не поддерживает полноценный tree-shaking, поэтому итоговый бандл может быть больше.
Vivus представляет собой монолитный модуль без глубокой модульной декомпозиции, поэтому эффективность tree-shaking ограничена.
Основные особенности:
При использовании Vite, Rollup или Webpack 5 оптимизация достигается за счёт:
Webpack-сборка позволяет управлять финальным размером библиотеки через production-mode:
// webpack.config.js
module.exports = {
mode: 'production',
optimization: {
minimize: true
}
};
Поведение Vivus внутри Webpack:
Рекомендуется избегать дублирования через CDN + импорт одновременно.
Rollup обеспечивает более точную сборку благодаря строгой ESM-модели.
Пример конфигурации:
import resolve from '@rollup/plugin-node-resolve';
import { terser } from '@rollup/plugin-terser';
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'esm'
},
plugins: [
resolve(),
terser()
]
};
Особенности при использовании Vivus:
Vite использует ESBuild на этапе разработки и Rollup на этапе production-сборки.
Поведение Vivus:
Пример использования:
import Vivus from 'vivus';
new Vivus('logo', {
type: 'scenario-sync',
duration: 100
});
Особенность Vite:
При подключении через CDN процесс сборки отсутствует:
<script src="https://cdn.jsdelivr.net/npm/vivus@latest/dist/vivus.min.js"></script>
Характеристики подхода:
Применяется в:
Vivus опирается на DOM-структуру SVG, поэтому бандлинг не затрагивает саму разметку, но влияет на способ её загрузки.
Способы интеграции SVG:
<svg id="icon" viewBox="0 0 100 100">
<path d="..." />
</svg>
Преимущества:
fetch('/icon.svg')
.then(res => res.text())
.then(svg => {
document.getElementById('container').innerHTML = svg;
new Vivus('container', {
duration: 80
});
});
В процессе бандлинга такой подход требует:
SVG-файлы часто проходят отдельную оптимизацию через инструменты:
Удаляются:
Важно учитывать:
<g> влияет на сценарии VivusОсновные стратегии уменьшения размера:
import('vivus').then(({ default: Vivus }) => {
new Vivus('logo');
});
Позволяет загружать библиотеку только при необходимости.
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
new Vivus(entry.target.id, { duration: 100 });
}
});
});
Снижает нагрузку на initial bundle.
При использовании компонентных систем (React, Vue) важно избегать:
Vivus корректно работает в:
Ключевым фактором является сохранение DOM-структуры SVG и корректная передача ID элемента в конструктор анимации.