ブラウザの代わりにNode.jsエンジンでjQueryを実行します

jQueryライブラリーは、複数のデータ形式(XML、HTML、DOMオブジェクト、通常のオブジェクト)を一度に操作するための広く認識されているツールであり、さらに、便利な(短い)名前の便利な(チェーン)メソッド呼び出しによって機能します。 したがって、jQueryを1つのクライアントだけでなく、サーバー側のJavaScript、特にNode.jsにも適応しようとする試みは、まったく驚くことではありません。



jQuery開発者が問題番号7102を克服したとき、その名前(「jQueryをCommonJS非同期モジュールとして登録する」) がしばらくの間私を欺いたことさえ正直に認めます。私は最初にNode.jsにあると思いましたNode.jsとommonJSモジュールには多くの共通点があります)これからjQueryは非選択的に動作します。 しかし、いや、 そこにあった。 コミット マージリクエスト 詳しく見る jQueryが実際にAMDモジュールとしてのみ登録できるようになり、自己登録の前にdefine.amd define.amd.jQueryのプロパティをチェックすることさえできることがわかります。



実際のところ、jQueryアーキテクチャは、ブラウザDOMの条件で使用するために「調整」されています。jQueryコードは、すべてのjQueryコードに隣接するメインクロージャの引数として機能するウィンドウオブジェクトの存在に依存します。 以前は、このような暗黙の仮定がさらにあり、 問題番号6690が削除されただけで、jQueryライブラリはグローバルナビゲーター ロケーションオブジェクトの存在に依存しなくなり代わりにそれらをウィンドウオブジェクトのプロパティとして受け取り始めました。 (このような仮定は、 グローバルオブジェクトがウィンドウではなくグローバルオブジェクトのプロパティとして機能するNode.jsには決して適していなかったことは明らかです。他の多くのCommonJS実装にも適合しませんでした。)



したがって、 Node.jsで jQueryを起動するには、 ブラウザベースのDOMの既製の実装が使用されます-jsdomパッケージなど、これに基づいて非選択的に動作します。たとえば、以下にコード例を示します。



// Print all of the news items on hackernews var jsdom = require('jsdom'); var fs = require('fs'); var jquery = fs.readFileSync("./jquery-1.6.2.min.js").toString(); jsdom.env({ html: 'http://news.ycombinator.com/', src: [ jquery ], done: function(errors, window) { var $ = window.$; console.log('HN Links'); $('td.title:not(:last) a').each(function() { console.log(' -', $(this).text()); }); } });
      
      





そして、jsdomはnode-jQueryパッケージ基づいておりこれは構文糖で作られた追加のラッパーによって区別されます。



このタスクに対する他の方法やアプローチはありませんが、これまでのところ誰もいません。



All Articles