node.js:jsdom 的问题 - jQuery 对象返回未定义
Posted
技术标签:
【中文标题】node.js:jsdom 的问题 - jQuery 对象返回未定义【英文标题】:node.js: problems with jsdom - jQuery object returns undefined 【发布时间】:2012-08-18 06:38:03 【问题描述】:我有兴趣为其中一个项目进行一些服务器端 DOM 操作,因此我决定查看node.js,尤其是jsdom。我对 node.js 完全陌生,所以我的错误可能很明显,但无论如何我都无法在任何地方找到我的问题的解决方案......
首先我在Windows本地运行node,也使用在线IDEcloud9
值得一提,因为我在为 node 安装最新的 jsdom 包(即 0.2.15)时遇到了麻烦,因为必需的依赖项 contextify 在 Windows 下无法编译(需要 C++ 和 Python,而且我发现 npm 没有支持构建 C++ 包)。所以我采取了两种替代方法:
我安装了一个不依赖于 contextify 的旧版本,即 jsdom@0.2.1。这是我目前拥有的 npm 列表
└─┬ 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,错误消失了......(仍然不确定这是正确的做法......)。所以,最后当我尝试运行这个 sn-p
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
。尝试在 cloud9 上使用节点 v0.6.x 和节点 v0.4.x 以及在本地使用节点 v0.8.7 运行。
我尝试做的另一件事是安装最新的 jsdom@0.2.15,从 here 上获取已编译的 contextify,安装 bindings 并将其添加到 contextify/node_modules,因为 contextify 依赖于它。我根本无法让它工作=(没有浪费太多时间,因为这似乎是一种错误的方法,并且 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 workspace,不要害羞。
任何帮助表示赞赏。也许还有其他更好的方法来完成我想要的。
谢谢。
【问题讨论】:
这并不是一个真正的答案,而是一个提示,我确实有机会使用它,但github.com/MatthewMueller/cheerio 似乎比 jsdom 更有趣,jsdom 速度很慢,只能解析格式良好的 html。 谢谢@3on!我能够在不到半分钟的时间内安装它并开始与cheerio 混在一起!我肯定会仔细看看。一直在搞乱 jsdom 我知道有更好的方法 ;) 【参考方案1】:Cheerio 是不久前推出的一个新模块,它比 jsdom 更易于使用,并且可以访问许多可以使用 jsdom 运行的问题。
jsdom 很棒,但如果你需要解析无效的 HTML,你必须使用 html5 解析器模块,它非常难以使用,它超级慢,而且对开发人员不友好。
还有PhantomJS要考虑:http://phantomjs.org我的bootstrap开始使用jQuery。https://github.com/sgentle/phantomjs-node(这是这样的hack,我无语了)
【讨论】:
谢谢! :) 在与 contextify 和 jsdom 混了几个小时之后。这令人耳目一新。以上是关于node.js:jsdom 的问题 - jQuery 对象返回未定义的主要内容,如果未能解决你的问题,请参考以下文章
Nodejs 学习笔记 - 借助 JSDOM 使用 jQuery