Библиотека jQuery — это общепризнанное средство манипуляции сразу несколькими форматами данных (XML, HTML, объекты DOM, обыкновенные объекты), да притом работающее посредством удобного (цепного) вызова методов с удобными (краткими) названиями. Поэтому ничуть не удивляют попытки приспособить jQuery не только к одному клиентскому, но также ещё и к серверному джаваскрипту — в частности, к Node.js.
Признаюсь честно, что когда разработчики jQuery превозмогли
проблему №7102, то её название («Register jQuery as a CommonJS async module»)
на какое-то время даже заставило меня обмануться: я сперва подумал было, что и в Node.js (так как модули Node.js и СommonJS имеют немало общего) отныне jQuery станет работать невозбранно. Ан нет,
не тут-то было. Пристальное вглядывание
в коммит и в запрос на слияние позволяет осознать, что jQuery, в сущности, обрёл возможность регистрироваться только
как AMD-модуль и даже проверяет свойства
define.amd и define.amd.jQuery перед саморегистрацией.
Собственно говоря, архитектура jQuery «затóчена» под употребление в условиях браузерной DOM: код jQuery полагается на существование объекта
window, который служит аргументом главного замыкания, окаймляющего весь код jQuery. Прежде же таких неявных предположений было ещё больше, и только с устранением
проблемы №6690 библиотека jQuery перестала полагаться на существование глобальных объектов
navigator и location, начав вместо того получать их как свойства объекта
window. (Понятно, что такое предположение никак не подходило для Node.js, где глобальные объекты служат свойствами объекта
global, а вовсе не
window; а равно не подходило и ко многим прочим реализациям CommonJS.)
Потому для запуска jQuery
в Node.js применяются готовые реализации
браузерной DOM — такие, как пакет
jsdom, на основе которого невозбранно работает, например, вот какой код, предлагаемый в качестве примера: