<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[jQuery 4.0: ES Modules и конец устаревшего кода]]></title><description><![CDATA[<p dir="auto">После десяти лет ожидания вышла jQuery 4.0 - крупное обновление, которое модернизирует библиотеку и избавляет её от багажа прошлого. Это не просто патч, а серьёзный шаг в развитии самой популярной JavaScript-библиотеки, который коснётся огромного количества проектов.</p>
<p dir="auto">Обновление принесло кардинальные изменения: миграцию на ES-модули, внедрение Trusted Types для безопасности, удаление устаревших API и множество других улучшений. Разработчикам предстоит разобраться, как эти изменения повлияют на их код и когда стоит переходить на новую версию.</p>
<h2>Миграция на ES-модули: конец эпохи AMD</h2>
<p dir="auto">Основное изменение jQuery 4.0 - это переход исходного кода с модулей AMD на ES-модули (ECMAScript Module, ESM). Это не просто техническая мелочь, а фундаментальная переделка архитектуры библиотеки.</p>
<p dir="auto">Раньше jQuery использовала AMD-модули и RequireJS для управления зависимостями. Исходный код публиковался вместе с релизами на npm и GitHub, но его нельзя было импортировать напрямую как модули без специального инструмента. Теперь всё изменилось. jQuery переведена на Rollup для упаковки, что даёт прямую совместимость с современными инструментами сборки и браузерами через стандартный <code>&lt;script type="module"&gt;</code>. Разработчики могут импортировать модули jQuery без дополнительных зависимостей.</p>
<p dir="auto"><strong>Чем это полезно:</strong></p>
<ul>
<li>Нативная совместимость с современными бандлерами (Webpack, Vite, Rollup)</li>
<li>Возможность использовать <code>import</code> и <code>export</code> напрямую, как в обычном коде</li>
<li>Меньше необходимость в RequireJS и других инструментах управления зависимостями</li>
<li>Прямая работа с <code>&lt;script type="module"&gt;</code> в браузерах</li>
<li>Упрощение процесса интеграции jQuery в новые проекты</li>
</ul>
<h2>Удаление устаревших функций и Array-методов</h2>
<p dir="auto">Вместе с модернизацией архитектуры jQuery 4.0 избавляется от старого кода, который более не нужен в современной веб-разработке. Команда разработчиков провела масштабную уборку.</p>
<p dir="auto">Основное изменение в этой области - удаление недокументированных методов Array из прототипа jQuery: <code>push</code>, <code>sort</code> и <code>splice</code>. Раньше jQuery-объекты позволяли использовать эти методы, как если бы это были обычные массивы. Теперь при попытке вызвать <code>.push()</code> напрямую на jQuery-объекте код сломается. Вместо <code>$elems.push(elem)</code> нужно писать <code>[].push.call($elems, elem)</code>.</p>
<p dir="auto">Это может показаться мелочью, но влияет на плагины jQuery, которые полагались на такое поведение. Если у вас есть старые плагины, которые используют эти методы, они потребуют обновления или вы останетесь на jQuery 3.x.</p>
<p dir="auto"><strong>Ещё удалено:</strong></p>
<ul>
<li>Поддержка браузеров раньше IE11 (IE11 ещё работает, но Edge Legacy и очень старые мобильные браузеры удалены)</li>
<li>Объекты Deferred и Callbacks из slim-сборки (используйте нативные Promise вместо них)</li>
<li>Различные внутренние недокументированные параметры</li>
<li>Методы, объявленные устаревшими в предыдущих версиях</li>
</ul>
<h2>CSS и автоматическое добавление единиц</h2>
<p dir="auto">Ещё одно важное изменение касается работы с CSS. jQuery 4.0 перестаёт автоматически добавлять единицы (px) к числовым значениям почти везде, где это раньше происходило.</p>
<p dir="auto">Это может выглядеть как мелкая деталь, но это очень практичное изменение. Раньше код вроде <code>.css("left", 10)</code> автоматически превращался в <code>left: 10px</code>. Это была “магия”, которая казалась удобной, но на деле приводила к неожиданному поведению, когда нужны были другие единицы - em, rem, %, vh и так далее.</p>
<p dir="auto">Теперь нужно быть явным: <code>.css("left", "10px")</code> или <code>.css("left", 10 + "px")</code>. Код становится понятнее, и меньше неожиданных багов с размерами элементов. Это также улучшает предсказуемость поведения и соответствует логике нативного JavaScript.</p>
<p dir="auto"><strong>Что изменилось:</strong></p>
<ul>
<li>Числа без единиц теперь не преобразуются автоматически</li>
<li>Нужно явно указывать единицы: <code>"10px"</code>, <code>"5em"</code>, <code>"100%"</code></li>
<li>Правило распространяется на большинство CSS-свойств</li>
<li>Исключения есть для некоторых свойств вроде <code>z-index</code> или <code>opacity</code></li>
</ul>
<h2>Безопасность: Trusted Types и CSP</h2>
<p dir="auto">jQuery 4.0 вводит поддержку Trusted Types - API для защиты от DOM-основанного cross-site scripting (DOM XSS). Это важно, потому что XSS-атаки остаются одной из самых распространённых уязвимостей веб-приложений.</p>
<p dir="auto">Trusted Types усложняет жизнь злоумышленникам, которые пытаются внедрить вредоносный код через некорректную обработку пользовательских данных. jQuery теперь может принимать HTML-код в виде объектов TrustedHTML, а при работе с асинхронными скриптами использует внешние теги <code>&lt;script&gt;</code> вместо встроенных скриптов.</p>
<p dir="auto">Вместе с этим улучшена совместимость с жёсткими Content Security Policy (CSP) настройками. Это особенно важно для высокозащищённых приложений, где нельзя использовать inline-скрипты и styles.</p>
<p dir="auto"><strong>Как это помогает:</strong></p>
<ul>
<li>Защита от DOM XSS-атак через неправильную обработку данных</li>
<li>Совместимость с CSP политиками уровня 3</li>
<li>Использование TrustedHTML при манипулировании DOM</li>
<li>Асинхронная загрузка скриптов через внешние теги вместо eval</li>
<li>Возможность работать в очень защищённых окружениях</li>
</ul>
<h2>Изменения в AJAX и JSONP</h2>
<p dir="auto">вcJQuery 4.0 автоматическое продвижение JSON-запросов в JSONP было полностью удалено. Раньше если jQuery получала JSON с необычным методом, она могла автоматически переключиться на JSONP. Теперь этого не происходит.</p>
<p dir="auto">Это означает, что JSONP будет использоваться только при явном указании. Вместо этого jQuery рекомендует использовать CORS для кросс-доменного взаимодействия - это более современный, безопасный и предсказуемый подход.</p>
<p dir="auto">Одновременно jQuery получила поддержку FormData в AJAX-запросах. Теперь двоичные данные обрабатываются автоматически без необходимости вручную отключать преобразование типов. Это упрощает работу с файлами, изображениями и другими бинарными данными в современных веб-приложениях.</p>
<p dir="auto"><strong>Ключевые изменения AJAX:</strong></p>
<ul>
<li>JSON больше не преобразуется автоматически в JSONP</li>
<li>JSONP используется только при явном указании</li>
<li>Встроена поддержка объекта FormData</li>
<li>Двоичные данные обрабатываются корректно</li>
<li>Рекомендуется использовать CORS вместо JSONP</li>
</ul>
<h2>Порядок событий фокуса</h2>
<p dir="auto">jQuery 4.0 приносит изменения и в порядок срабатывания событий фокуса (focus, blur, focusin, focusout). Теперь они следуют W3C-спецификации: <code>blur</code>, <code>focusout</code>, <code>focus</code>, <code>focusin</code>. Раньше порядок мог быть другим.</p>
<p dir="auto">Это может повлиять на код, который полагается на определённый порядок срабатывания этих событий. Если у вас есть валидация форм, обработчики горячих клавиш или другая логика, привязанная к событиям фокуса, стоит внимательно её проверить при обновлении.</p>
<h2>Slim-сборка стала ещё меньше</h2>
<p dir="auto">Slim-версия jQuery (без AJAX и effects) сократилась до 19.5 KB. Это стало возможным благодаря удалению объектов Deferred и Callbacks, которые больше не входят в slim-сборку.</p>
<p dir="auto">Если ваш проект использует очереди (queue), анимации или старый стиль работы с Promise через Deferred, нужно либо перейти на полную сборку jQuery, либо использовать нативные Promise.</p>
<h2>Как подготовить свой код к обновлению</h2>
<p dir="auto">Переход на jQuery 4.0 не обязателен немедленно, но лучше подготовиться заранее. Команда jQuery предоставляет специальный плагин миграции для облегчения процесса.</p>
<p dir="auto"><strong>Порядок действий:</strong></p>
<ol>
<li>Установите migrate-плагин и запустите тесты - он подскажет, что сломается</li>
<li>Обновите свой код: замените числовые CSS-значения на явные единицы</li>
<li>Проверьте критичные зоны: формы, валидация, AJAX, старые плагины</li>
<li>Убедитесь, что плагины совместимы с jQuery 4.0</li>
<li>Удалите migrate и проведите финальную регрессию</li>
</ol>
<p dir="auto">Для большинства проектов переход будет безболезненным. Но если у вас много legacy-кода, старых плагинов или сложная архитектура, стоит взять время на тестирование.</p>
<h2>На что обратить внимание при миграции</h2>
<p dir="auto">Основные точки, которые нужно проверить при обновлении:</p>
<ul>
<li>CSS-задания чисел без единиц (<code>.css("left", 10)</code> -&gt; <code>.css("left", "10px")</code>)</li>
<li>Использование Array-методов на jQuery-объектах (<code>push</code>, <code>sort</code>, <code>splice</code>)</li>
<li>AJAX-запросы, которые полагались на автоматическое превращение JSON в JSONP</li>
<li>События фокуса и их порядок срабатывания</li>
<li>Плагины, которые используют удалённые API или недокументированные методы</li>
<li>Slim-сборка, если вам нужны Deferred или Callbacks</li>
</ul>
<p dir="auto">Кстати, jQuery 3.x будет получать поддержку дольше, чем 4.0. Это значит, что торопиться не обязательно, если у вас есть сомнения - можно оставить текущую версию на время.</p>
<h2>Чего ещё ждать от jQuery</h2>
<p dir="auto">jQuery 4.0 показывает, что библиотека продолжает развиваться и модернизироваться. Отказ от AMD в пользу ES-модулей, добавление Trusted Types, удаление легаси-кода - всё это указывает на то, что jQuery готовится к следующему десятилетию веб-разработки.</p>
<p dir="auto">Одновременно выход jQuery 4.0 подтверждает, что библиотека остаётся актуальной. Несмотря на появление фреймворков типа React, Vue и Angular, jQuery по-прежнему используется в миллионах проектов. Её обновления показывают стремление соответствовать современным стандартам и практикам веб-разработки, а не просто почивать на лаврах.</p>
<p dir="auto">Стоит следить за изменениями в экосистеме jQuery и постепенно адаптировать свой код. Не нужно спешить с обновлением, но и откладывать в долгий ящик не стоит.</p>
]]></description><link>https://forum.exlends.ru/topic/883/jquery-4.0-es-modules-i-konec-ustarevshego-koda</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:11:48 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/883.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Mar 2026 13:52:27 GMT</pubDate><ttl>60</ttl></channel></rss>