1

我有兴趣为其中一个项目进行一些服务器端 DOM 操作,因此我决定看一下node.js,尤其是jsdom。我对node.js完全陌生,所以我的错误可能很明显,但无论如何我都无法在任何地方找到我的问题的解决方案......

首先,我在本地运行 Windows 上的节点,并且还使用在线 IDE cloud9

值得一提的是,我在为 node 安装最新的 jsdom 包(即 0.2.15)时遇到了麻烦,因为所需的依赖contextify无法在 Windows 下编译(需要 C++ 和 Python,而且我发现 npm 不支持构建 C++ 包) . 所以我采取了两种替代方法:

  1. 我安装了一个不依赖于 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,错误消失了......(仍然不太确定这是正确的做法......)。所以,最后当我尝试运行这个片段时

    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 运行。

  2. 我尝试做的另一件事是安装最新的 jsdom@0.2.15,从这里获取已编译的 contextify ,安装绑定并将其添加到 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 工作区,不要害羞。

任何帮助表示赞赏。也许还有其他更好的方法来完成我想要的。

谢谢。

4

1 回答 1

5

Cheerio是不久前推出的一个新模块,它比 jsdom 更易于使用,并且可以访问许多可以使用 jsdom 运行的问题。

jsdom 很棒,但是如果你需要解析无效的 HTML,它可能真的很难使用,你必须使用html5解析器模块,它非常慢,而且所有东西都不是开发人员友好的。

还有 PhantomJS 需要考虑:
http : //phantomjs.org我的 jQuery 入门指南。
https://github.com/sgentle/phantomjs-node(这真是个hack,我无语了)

于 2012-08-22T19:35:44.637 回答