Самый быстрый способ начать работу с библиотекой — подключение через CDN. В этом случае не требуется установка зависимостей и настройка сборщика.
Для корректной работы необходимо подключить CSS и JavaScript файлы:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tom-select/dist/css/tom-select.css">
<script src="https://cdn.jsdelivr.net/npm/tom-select/dist/js/tom-select.complete.min.js"></script>
CSS-файл отвечает за базовую стилизацию компонента, включая выпадающее меню, состояния элементов и анимации. JS-файл содержит полный набор функциональности, включая плагины, обработчики событий и внутренние утилиты.
Инициализация выполняется после загрузки DOM:
<sel ect id="select">
<option value="1">JavaScript</option>
<option value="2">TypeScript</option>
</select>
<script>
new TomSelect("#select", {
create: false,
sortField: "text"
});
</script>
Ключевой момент заключается в том, что при использовании CDN класс
TomSelect становится доступным глобально, без импортов и
дополнительных конфигураций.
Для проектов, использующих сборщики модулей, предпочтительным вариантом является установка через npm.
npm install tom-select
После установки библиотека становится частью зависимостей проекта и может использоваться в модульной системе.
В современных проектах с поддержкой ES Modules используется прямой импорт:
import TomSelect fr om "tom-select";
import "tom-select/dist/css/tom-select.css";
Инициализация:
const sel ect = new TomSelect("#select", {
maxItems: 3,
create: true
});
Особенность данного подхода заключается в том, что стили импортируются отдельно. Это позволяет сборщику (например, Vite или Webpack) включать их в общий бандл или выделять в отдельный CSS-файл.
В старых проектах Node.js или при использовании Webpack без ES
Modules возможен импорт через require:
const TomSelect = require("tom-select");
require("tom-select/dist/css/tom-select.css");
Инициализация не отличается:
const sel ect = new TomSelect("#select", {
plugins: ["remove_button"]
});
Несмотря на поддержку CommonJS, предпочтительным остаётся ES Modules как более современный стандарт.
При использовании сборщиков важно учитывать обработку CSS и зависимостей.
import TomSelect fr om "tom-select";
import "tom-select/dist/css/tom-select.css";
new TomSelect("#select");
Vite автоматически обрабатывает CSS импорт и включает стили в итоговую сборку.
Webpack требует наличия css-loader и
style-loader:
npm install css-loader style-loader --save-dev
Конфигурация:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: ["style-loader", "css-loader"]
}
]
}
};
Импорт:
import TomSelect fr om "tom-select";
import "tom-select/dist/css/tom-select.css";
Parcel не требует дополнительной конфигурации. Достаточно импортировать модуль и стили:
import TomSelect from "tom-select";
import "tom-select/dist/css/tom-select.css";
Библиотека может быть подключена без встроенных стилей, если предполагается использование кастомной темы.
import TomSelect from "tom-select";
В этом случае необходимо самостоятельно реализовать стилизацию компонентов:
Отсутствие CSS не влияет на функциональность, но полностью убирает визуальную составляющую.
В пакете доступны разные варианты сборки:
tom-select.complete.js — включает все плагины и
расширенияtom-select.js — базовая версия без части дополнительных
модулейИспользование полной сборки через CDN:
<script src="https://cdn.jsdelivr.net/npm/tom-select/dist/js/tom-select.complete.min.js"></script>
Базовая версия при модульной установке:
import TomSelect from "tom-select";
Полная сборка предпочтительна при быстром старте, базовая — при необходимости уменьшения размера бандла.
Возможен вариант ручной загрузки файлов из node_modules
или скачанного архива.
<link rel="stylesheet" href="/assets/tom-select.css">
<script src="/assets/tom-select.js"></script>
Такой подход используется в окружениях без сборщика, но требует ручного контроля версий и обновлений.
При подключении через script-тег важно учитывать порядок загрузки:
<script src="tom-select.js"></script>
<script>
document.addEventListener("DOMContentLoaded", () => {
new TomSelect("#select");
});
</script>
Если скрипт подключён с defer, необходимость в
обработчике DOMContentLoaded исчезает:
<script src="tom-select.js" defer></script>
В SPA (React, Vue, Svelte) библиотека подключается как обычный модуль, но инициализация должна выполняться после монтирования DOM-элемента.
Пример логики:
import TomSelect from "tom-select";
function initSelect() {
new TomSelect("#select");
}
window.addEventListener("load", initSelect);
В компонентах важно уничтожать экземпляры при размонтировании, чтобы избежать утечек памяти:
const ts = new TomSelect("#select");
ts.destroy();
Частые проблемы связаны не с самой библиотекой, а с неправильным подключением ресурсов:
null-селекторуКорректная структура загрузки и единообразный способ подключения исключают большинство подобных проблем.