Могу ли я использовать jQuery с Node.js? - PullRequest
542 голосов
/ 26 ноября 2009

Можно ли использовать селекторы jQuery / манипулирование DOM на стороне сервера с помощью Node.js?

Ответы [ 19 ]

3 голосов
/ 27 июля 2017

Мой рабочий код:

npm install jquery

и затем:

global.jQuery   = require('jquery');
global.$        = global.jQuery;

или если окно присутствует, то:

typeof window !== "undefined" ? window : this;
window.jQuery   = require('jquery');
window.$        = window.jQuery;
3 голосов
/ 18 апреля 2013

ПРЕДУПРЕЖДЕНИЕ

Это решение, как упомянуто Golo Roden , не является правильным . Это просто быстрое решение, помогающее людям запускать свой реальный код jQuery с использованием структуры приложения Node, но это не философия Node, поскольку jQuery все еще работает на стороне клиента, а не на стороне сервера. Прошу прощения за неправильный ответ.


Вы также можете визуализировать Jade с помощью узла и поместить свой код jQuery внутрь. Вот код нефритового файла:

!!! 5
html(lang="en")
  head
    title Holamundo!
    script(type='text/javascript', src='http://code.jquery.com/jquery-1.9.1.js')
  body
    h1#headTitle Hello, World
    p#content This is an example of Jade.
    script
      $('#headTitle').click(function() {
        $(this).hide();
      });
      $('#content').click(function() {
        $(this).hide();
      });
2 голосов
/ 26 января 2019

Прежде всего установите его

npm install jquery -S

После установки вы можете использовать его, как показано ниже

import $ from 'jquery';
window.jQuery = window.$ = $;
$(selector).hide();

Вы можете посмотреть полное руководство здесь: https://medium.com/fbdevclagos/how-to-use-jquery-on-node-df731bd6abc7

1 голос
/ 01 февраля 2018

Начиная с jsdom v10, функция .env () устарела. Я сделал это, как показано ниже, после того, как многие вещи требовали jquery:

var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;

var $ = jQuery = require('jquery')(window);

Надеюсь, это поможет вам или любому, кто сталкивался с подобными проблемами.

1 голос
/ 29 апреля 2012

Модуль jsdom - отличный инструмент. Но если вы хотите оценить целые страницы и сделать что-то интересное на их стороне сервера, я предлагаю запустить их в их собственном контексте:

vm.runInContext

Таким образом, такие вещи, как require / CommonJS на сайте, не повредят самому процессу Node.

Вы можете найти документацию здесь . Ура!

0 голосов
/ 26 ноября 2009

Не то, что я знаю. DOM - это вещь на стороне клиента (jQuery анализирует не HTML, а DOM).

Вот некоторые текущие проекты Node.js:

http://wiki.github.com/ry/node

И SimonW djangode чертовски круто ...

0 голосов
/ 14 марта 2010

Нет. Перенос среды браузера на узел будет довольно трудоемким.

Другой подход, который я сейчас изучаю для модульного тестирования, заключается в создании «пробной» версии jQuery, которая обеспечивает обратные вызовы при каждом вызове селектора.

Таким образом, вы можете тестировать свои плагины jQuery, не имея DOM. Вам все равно придется тестировать в реальных браузерах, чтобы увидеть, работает ли ваш код в открытом режиме, но если вы обнаружите специфичные для браузера проблемы, вы также можете легко «насмехаться» над ними в своих модульных тестах.

Я отправлю что-нибудь на github.com/felixge, как только он будет готов к показу.

0 голосов
/ 18 октября 2017

Вы можете использовать Electron , он допускает гибридные browserjs и nodejs.

Раньше я пытался использовать canvas2d в nodejs, но в конце концов сдался. Он не поддерживается по умолчанию для nodejs, и его слишком сложно установить (много-много ... зависимостей). Пока я не использую Electron, я могу легко использовать весь мой предыдущий код browserjs, даже WebGL, и передавать значение результата (например, данные изображения base64) в код nodejs.

0 голосов
/ 08 февраля 2010

Альтернативой является использование Underscore.js . Он должен предоставлять то, что вы, возможно, хотели на стороне сервера от JQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...