1

プロジェクトの1つでサーバー側のDOM操作を行うことに興味があるので、node.js、特にjsdomを調べることにしました。私はnode.jsにまったく慣れていないので、おそらく私の間違いは明らかですが、それでもなお、私の問題の解決策をどこにも見つけることができませんでした...

まず、Windowsでノードをローカルで実行しており、オンラインIDEcloud9も使用しています

必要な依存関係のcontextifyがWindowsではコンパイルされないため(0.2.15)、ノードの最新のjsdomパッケージ(0.2.15)のインストールで問題が発生したため、言及する価値がありました(C ++とPythonが必要であり、npmはC ++パッケージのビルドをサポートしていないことがわかりました) 。だから私は2つの代替アプローチを取りました:

  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. 私がやろうとしたもう1つのことは、最新のjsdom@0.2.15をインストールし、ここからコンパイルされたcontextifyを取得し、バインディングをインストールして、 contextifyがそれに依存しているので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ワークスペースです。恥ずかしがらずに遊んでください。

助けていただければ幸いです。たぶん、私が望んでいたことを達成するために他にもっと良いものがあります。

ありがとう。

4

1 に答える 1

5

Cheerioは、少し前にリリースされた新しいモジュールであり、jsdomよりもはるかに簡単に使用でき、jsdomで実行できる問題の多くにアクセスできます。

jsdomは素晴らしいですが、無効なHTMLを解析する必要がある場合は、html5パーサーモジュールで遊ぶ必要があります。これは非常に低速で、すべてが開発者に適しているわけではありません。

考慮すべきPhantomJSもあります:http://phantomjs.orgjQueryを使い
始めるための私のブートストラップ
https://github.com/sgentle/phantomjs-node(これはそのようなハックです、私は言葉がありません)

于 2012-08-22T19:35:44.637 に答える