node.js: проблемы с jsdom - объект jQuery возвращает неопределенное значение

Я заинтересован в выполнении некоторых серверных DOM-манипуляций для одного из проектов, поэтому я решил взглянуть на node.js и, в частности, на jsdom. Я совершенно новичок в node.js, так что, вероятно, мои ошибки очевидны, но тем не менее я нигде не мог найти решение своей проблемы...

Прежде всего я запускаю узел на Windows локально, а также использую онлайн IDE cloud9

Стоило упомянуть, что у меня возникли проблемы с установкой последнего пакета jsdom для узла (который является 0.2.15), потому что требуемый контекст зависимостей не будет компилироваться в Windows (требуются C++ и Python, и, как я обнаружил, npm не поддерживает сборку пакетов C++), Поэтому я выбрал два альтернативных подхода:

  1. Я установил более старую версию, которая не зависит от contextify, то есть jsdom@0.2.1. Вот список того, что у меня сейчас есть

    └─┬ jsdom@0.2.1
      ├── cssom@0.2.5
      ├── htmlparser@1.7.6
      └── request@2.10.0
    

    Когда я попытался запустить простой тестовый скрипт, взятый из jsdom github repo cloud9, выдает это предупреждение

    The "sys" module is now called "util". It should have a similar
    

    Я попытался исправить это, заменив все упоминания о sys в util, ошибка исчезла... (хотя я все еще не был уверен, что это было правильно...). И вот, наконец, когда я попытался запустить этот фрагмент

    var jsdom = require("jsdom");
    
    jsdom.env("http://nodejs.org/dist/", [
      'http://code.jquery.com/jquery-1.5.min.js'
    ],
    function(errors, window) {
      console.log("there have been", window.$("a").length, "nodejs releases!");
    });
    

    я узнал что window.$ === undefined, Попытка работать с узлом v0.6.x и узлом v0.4.x в облаке 9 и с узлом v0.8.7 локально.

  2. Еще я попытался установить последнюю версию jsdom@0.2.15, получить отсюда скомпилированный контекст, установить привязки и добавить его в contextify /node_modules, так как contextify зависит от него. Я не был в состоянии заставить это работать вообще =(Не тратил много времени, поскольку это кажется ложным подходом, и размышлять не актуально.

    Вот список npm

    └─┬ jsdom@0.2.15
      ├─┬ contextify@0.1.2
      │ └── bindings@1.0.0
      ├── cssom@0.2.5
      ├── htmlparser@1.7.6
      └── request@2.10.0
    

Кроме того, вот мое рабочее пространство cloud9, не стесняйтесь поиграть.

Любая помощь приветствуется. Может быть, есть другие, лучше выполнить то, что я хотел.

Благодарю.

1 ответ

Cheerio - это новый модуль, выпущенный не так давно, который намного проще в использовании, чем jsdom, и предоставляет доступ ко многим вопросам, которые вы можете запустить с помощью jsdom.

jsdom - это круто, но его очень сложно использовать, если вам нужно разобрать недопустимый HTML, вам нужно поиграть с модулем парсера html5, который очень медленный, и все это не дружественно для разработчиков.

Есть также PhantomJS для рассмотрения:
http://phantomjs.org/ мой начальный загрузчик, чтобы начать работу с jQuery.
https://github.com/sgentle/phantomjs-node (это такой взлом, я потерял дар речи)

Другие вопросы по тегам