2012-08-22 72 views
1

我有興趣爲一個項目做一些服務器端DOM操作,所以我決定看看node.js,特別是jsdom。我對node.js完全陌生,所以可能我的錯誤是顯而易見的,但從來沒有我不能找到解決方案,我的問題在任何地方...node.js:jsdom問題 - jQuery對象返回undefined

首先,我在本地Windows上運行節點,並使用在線IDE cloud9

值得一提的是,由於所需的依賴項contextify不能在Windows下編譯(需要C++和Python,而且作爲我發現npm不支持構建C++包)。所以,我花了兩個替代方法:

  1. 我已經安裝了不依賴於contextify的舊版本,也就是[email protected]。這是當我試圖逃避jsdom github repo CLOUD9採取簡單的測試腳本返回此警告的什麼我現在有

    └─┬ [email protected] 
        ├── [email protected] 
        ├── [email protected] 
        └── [email protected] 
    

    NPM列表

    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. 我試圖做的另一件事是安裝最新[email protected],得到contextify來自here編譯,安裝bindings,並把它添加到contextify/node_modules作爲contextify是依賴於它。我是不是能夠使它在所有的工作=(沒有浪費太多的時間,因爲它似乎是一個錯誤的做法,contextify是不是最新的。

    這裏的NPM列表

    └─┬ [email protected] 
        ├─┬ [email protected] 
        │ └── [email protected] 
        ├── [email protected] 
        ├── [email protected] 
        └── [email protected] 
    

而且,這裏是我的cloud9 workspace,不要害羞玩弄。

讚賞任何幫助。也許還有其他更好的來完成我想要的東西。

感謝。

+2

這是不是一個真正的答案更小費,我也必須使用它卻把機會,但https://github.com/MatthewMueller/cheerio似乎要比jsdom更有趣,它比較慢,只能解析格式良好的html。 – 3on

+0

謝謝@ 3on!我能夠安裝它,並開始在不到半分鐘的時間內與cheerio鬼混!我一定要仔細看看。所有的時間與jsdom搞亂我知道有更好的辦法;) – dr3w

回答

5

Cheerio是一個很久以前出現的新模塊,比jsdom使用起來要簡單多了,並且可以使用jsdom運行許多問題。

jsdom很棒,但如果您需要解析非有效的HTML,您必須使用html5解析器模塊進行解析,這非常慢,而且所有的東西都不友好。

還有PhantomJS考慮:
http://phantomjs.orgbootstrap開始使用jQuery的。
https://github.com/sgentle/phantomjs-node(這是這樣一個hack,我無語)

+0

謝謝! :)經過幾個小時的調戲和jsdom。這很令人耳目一新。 – DMin