node.js: проблемы с jsdom - объект jQuery возвращает неопределенное значение
Я заинтересован в выполнении некоторых серверных DOM-манипуляций для одного из проектов, поэтому я решил взглянуть на node.js и, в частности, на jsdom. Я совершенно новичок в node.js, так что, вероятно, мои ошибки очевидны, но тем не менее я нигде не мог найти решение своей проблемы...
Прежде всего я запускаю узел на Windows локально, а также использую онлайн IDE cloud9
Стоило упомянуть, что у меня возникли проблемы с установкой последнего пакета jsdom для узла (который является 0.2.15), потому что требуемый контекст зависимостей не будет компилироваться в Windows (требуются C++ и Python, и, как я обнаружил, npm не поддерживает сборку пакетов C++), Поэтому я выбрал два альтернативных подхода:
Я установил более старую версию, которая не зависит от 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 локально.Еще я попытался установить последнюю версию 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 (это такой взлом, я потерял дар речи)