Библиотека распространяется через npm и подключается как стандартная зависимость JavaScript-проекта. Основной пакет устанавливается командой:
npm install tom-select
После установки пакет появляется в node_modules, а его
метаданные фиксируются в package.json и
package-lock.json. Это обеспечивает воспроизводимость
сборки и одинаковое поведение зависимостей в разных окружениях.
Версионирование следует семантическому подходу. Обновления могут включать исправления, новые возможности или изменения API. Проверка установленной версии выполняется через:
npm list tom-select
или
npx tom-select --version
(если пакет доступен как исполняемый модуль в конкретной сборке).
После установки в node_modules/tom-select
содержатся:
Ключевые точки входа обычно представлены в package.json
пакета через поля main и module, что позволяет
сборщикам выбирать оптимальный формат подключения.
В современных сборках (Vite, Webpack, Rollup) предпочтителен импорт через ES-модули:
import TomSelect from "tom-select";
После импорта класс TomSelect используется для
инициализации селектов на DOM-элементах.
Дополнительно подключаются стили, так как логика и оформление разделены:
import "tom-select/dist/css/tom-select.css";
Отсутствие стилей приводит к корректной работе функционала без визуального оформления, что часто воспринимается как ошибка интеграции.
В старых проектах или Node.js-сборках без ESM применяется CommonJS:
const TomSelect = require("tom-select").default;
require("tom-select/dist/css/tom-select.css");
Особенность заключается в наличии .default, так как
пакет экспортируется как ES module, а CommonJS требует обращения к
дефолтному экспорту через обёртку.
Vite автоматически обрабатывает ESM:
import TomSelect from "tom-select";
import "tom-select/dist/css/tom-select.css";
Особенность Vite заключается в нативной поддержке ES модулей без дополнительной трансформации, что снижает накладные расходы при сборке.
В Webpack требуется корректная настройка загрузчиков CSS:
import TomSelect from "tom-select";
import "tom-select/dist/css/tom-select.css";
Конфигурация должна включать обработку CSS через
css-loader и style-loader, иначе стили не
будут применены.
При использовании Rollup важно учитывать оптимизацию tree-shaking:
import TomSelect from "tom-select";
import "tom-select/dist/css/tom-select.css";
Rollup корректно удаляет неиспользуемые части кода при правильной
конфигурации плагинов @rollup/plugin-node-resolve и
@rollup/plugin-commonjs.
Пакет включает декларации типов, поэтому дополнительная установка
@types обычно не требуется. Использование в TypeScript:
import TomSelect from "tom-select";
const sel ect = new TomSelect("#select", {
create: true,
persist: false
});
Типизация позволяет получить автодополнение параметров конфигурации и контроль корректности опций.
Функциональность библиотеки разделена на логику и представление. CSS-файл:
tom-select/dist/css/tom-select.css
содержит:
Без подключения CSS поведение остаётся функциональным, но визуально компонент теряет читаемость и интерактивность.
Установка конкретной версии выполняется явно:
npm install tom-select@2.3.0
Использование диапазонов версий в package.json:
{
"dependencies": {
"tom-select": "^2.3.0"
}
}
Символ ^ фиксирует совместимость по мажорной версии,
позволяя обновления минорных и патч-версий.
При повторной установке зависимостей используется:
npm ci
Команда обеспечивает чистую установку на основе
package-lock.json, удаляя старые версии и предотвращая
расхождения зависимостей между средами.
Очистка и повторная сборка:
rm -rf node_modules
npm install
Типовые проверки после установки:
node_modules/tom-selectПростейшая проверка инициализации:
import TomSelect fr om "tom-select";
import "tom-select/dist/css/tom-select.css";
new TomSelect("#select");
Некоторые окружения требуют явного указания интероп-режима. Конфликт между форматами модулей может проявляться в:
undefined is not a constructordefaultРешения зависят от сборщика:
esModuleInterop в TypeScriptcommonjs плагина в Rollupmodule режим в WebpackПодключение через npm позволяет использовать tree-shaking. Для уменьшения размера итогового бандла:
В некоторых случаях применяется динамический импорт:
import("tom-select").then(({ default: TomSelect }) => {
new TomSelect("#select");
});
При использовании SSR (например, Node.js рендеринг) важно учитывать отсутствие DOM. Инициализация выполняется только на клиенте:
if (typeof window !== "undefined") {
import("tom-select").then(({ default: TomSelect }) => {
new TomSelect("#select");
});
}
Такой подход предотвращает ошибки
document is not defined.
Библиотека корректно работает в стандартной npm-экосистеме:
useEffect и refmountedИнтеграция всегда начинается с npm-установки и последующего импорта модуля в контекст приложения.