Библиотека STOMP.js активно развивается, получает исправления ошибок, обновления API, улучшения производительности и совместимости с современными версиями Javascript, TypeScript, браузеров и брокеров сообщений. Использование устаревших зависимостей приводит к накоплению технического долга, проблемам безопасности и несовместимости с экосистемой.
Регулярное обновление позволяет:
Особенно важно обновлять зависимости в приложениях реального времени:
В проектах npm версия определяется через:
npm list @stomp/stompjs
Либо:
npm info @stomp/stompjs version
Для Yarn:
yarn list @stomp/stompjs
Для pnpm:
pnpm list @stomp/stompjs
Проверка содержимого package.json:
{
"dependencies": {
"@stomp/stompjs": "^7.1.0"
}
}
Изменение третьего числа версии:
7.1.0 → 7.1.1
Обычно содержат:
Как правило, безопасны.
Изменение второго числа версии:
7.1.0 → 7.2.0
Могут включать:
Требуют дополнительного тестирования.
Изменение первого числа версии:
6.1.2 → 7.0.0
Обычно содержат breaking changes:
Такие обновления требуют миграции кода.
npm outdated
Пример вывода:
Package Current Wanted Latest
@stomp/stompjs 6.1.2 6.1.5 7.1.0
Поля означают:
Current — установленная версия;Wanted — максимальная версия согласно semver;Latest — последняя доступная версия.Популярный инструмент анализа обновлений:
npm install -g npm-check-updates
Проверка:
ncu
Обновление package.json:
ncu -u
После изменения зависимостей:
npm install
STOMP.js использует SemVer.
^"@stomp/stompjs": "^7.1.0"
Разрешает:
7.x.x
Но запрещает:
8.x.x
~"@stomp/stompjs": "~7.1.0"
Разрешает только:
7.1.x
Используется для более строгого контроля.
"@stomp/stompjs": "7.1.0"
Полностью отключает автоматические обновления.
Подход полезен:
npm install @stomp/stompjs@latest
npm install @stomp/stompjs@7.1.0
npm update @stomp/stompjs
yarn upgrade @stomp/stompjs
До конкретной версии:
yarn add @stomp/stompjs@7.1.0
pnpm update @stomp/stompjs
Либо:
pnpm add @stomp/stompjs@latest
Перед major-обновлением необходимо изучать:
Наиболее опасные изменения касаются:
import Stomp from 'stompjs';
import { Client } from '@stomp/stompjs';
Изменение связано с переходом на современную архитектуру модулей.
Stomp.client() к Clientconst client = Stomp.client(url);
const client = new Client({
brokerURL: url
});
Новый API обеспечивает:
client.connect({}, () => {
console.log('Connected');
});
client.onConn ect = () => {
console.log('Connected');
};
client.activate();
Изменение связано с переходом на событийную архитектуру.
client.reconnect_delay = 5000;
const client = new Client({
reconnectDelay: 5000
});
Переименование параметра часто становится причиной ошибок после обновления.
client.heartbeat.outgoing = 20000;
client.heartbeat.incoming = 20000;
const client = new Client({
heartbeatIncoming: 20000,
heartbeatOutgoing: 20000
});
После обновления необходимо анализировать:
Типичный warning:
Deprecated API usage detected
Игнорирование deprecated API приводит к проблемам при следующем major-релизе.
Современный STOMP.js содержит встроенные типы.
Устаревшие пакеты:
@types/stompjs
могут конфликтовать с новыми версиями библиотеки.
После обновления рекомендуется удалить:
npm uninstall @types/stompjs
После обновления необходимо тестировать:
Особенно часто возникают проблемы:
После обновления необходимо тестировать:
Некоторые версии STOMP.js меняют:
После обновления важно тестировать работу с:
Разные брокеры могут по-разному реагировать на:
Обязательный этап тестирования.
Проверяются:
Пример теста:
client.onWebSocketCl ose = () => {
console.log('Socket closed');
};
client.onReconn ect = () => {
console.log('Reconnect');
};
Некоторые обновления меняют поведение subscription lifecycle.
Важно убедиться, что после reconnect:
После обновления необходимо тестировать:
client.subscribe('/queue/test', (message) => {
message.ack();
});
Особенно важно проверять:
Рекомендуется запускать:
Некоторые обновления изменяют:
Проверка выполняется через:
После обновления иногда появляются дублирующиеся соединения.
Причины:
activate();Особенно актуально для:
Типичная проблема:
useEffect(() => {
client.activate();
return () => {
client.deactivate();
};
}, []);
После обновления reconnect может продолжать работу после unmount, если cleanup реализован неправильно.
Современный API поддерживает асинхронную деактивацию:
await client.deactivate();
После обновления необходимо учитывать async lifecycle.
Новые версии STOMP.js лучше интегрируются с async API.
Пример:
async function disconnect(client) {
await client.deactivate();
}
Старый подход:
client.debug = console.log;
Новый подход:
const client = new Client({
debug: (message) => {
console.log(message);
}
});
После обновления необходимо убедиться, что verbose logging отключён:
const client = new Client({
debug: () => {}
});
Либо:
debug: process.env.NODE_ENV === 'development'
? console.log
: () => {}
Некоторые обновления могут увеличить размер бандла.
Проверяются:
Инструменты:
webpack-bundle-analyzer
source-map-explorer
После обновления рекомендуется запускать:
npm audit
Исправление проблем:
npm audit fix
Крайне важно хранить:
package-lock.json;yarn.lock;pnpm-lock.yaml.Это обеспечивает:
Типичный pipeline:
npm ci
npm run lint
npm run test
npm run build
После обновления STOMP.js pipeline должен проверять:
Нежелательно обновлять сразу большое количество пакетов.
Безопасный подход:
Для крупных систем используется частичный rollout:
Это позволяет обнаружить:
После деплоя отслеживаются:
Attempted import error
Причина:
client.activate is not a function
Причина:
Heartbeat timeout
Причины:
Reconnect loop detected
Причины:
Наиболее надёжный подход включает:
npm install @stomp/stompjs@latest
import { Client } from '@stomp/stompjs';
const client = new Client({
brokerURL: 'ws://localhost:15674/ws',
reconnectDelay: 5000,
heartbeatIncoming: 10000,
heartbeatOutgoing: 10000,
debug(message) {
console.log(message);
}
});
client.onConn ect = () => {
console.log('Connected');
client.subscribe('/topic/messages', (message) => {
console.log(message.body);
});
};
client.onStompEr ror = (frame) => {
console.error(frame.headers.message);
};
client.activate();
В крупных проектах иногда используется адаптер:
function createClient(url) {
return new Client({
brokerURL: url
});
}
Это позволяет:
Иногда новая версия включается через feature flag:
const useNewStomp = true;
Это позволяет:
При обнаружении критических ошибок выполняется rollback:
npm install @stomp/stompjs@6.1.2
После чего восстанавливается lock-файл и выполняется повторная сборка проекта.