6

私がやろうとしているのは、jQuery プラグインを Node.js 上の jQuery で動作するように適合させることです。

私が理解していることから、最も基本的な形式の CommonJS では、ライブラリをクロージャーでラップする必要があり、そのクロージャーは「エクスポート」パラメーターのパラメーターとして使用できるようにする必要があります。そうすれば、コードは (名前付き変数を介して) 独自の名前空間にきちんと含まれ、グローバル名前空間を汚染しません。

jQuery 自体は '$' 名前空間に含まれる必要があります。

アラ:

var $ = require(jquery);

しかし、私のプラグインは '$' 名前空間にも収まるはずです。

プラグイン コード:

(function( $ ) {
  // plugin code goes here
})(jquery);

exports.jquery = jquery // will this work?

元:

var $ = require(jquery);
$ = require(jquery-csv.js); // will this work?

モジュールが「$」のサブ名前空間 (つまり「$.csv」) として設定されていても、ブラウザーで動作するように、すべてが「$」名前空間から呼び出せるように設定されています。

単一の名前空間で複数の require を行う標準的な方法はありますか? そうでない場合、実行可能な代替手段はありますか (プラグイン コードの浅いコピーを行うなど)?

注: 匿名関数ラッパーは、標準の jquery ガイドラインに従います。

注: この修正は、jquery-csvプラグインに適用されます。

4

3 に答える 3

2

プラグインでjQuery を要求する必要があります。

var $ = require("jquery");

これは、CommonJS と AMD の両方の標準であるUMD (Universal Module Definition)の手法でもあります。

UMD を使用した jQuery プラグインの例も参照してください。

于 2013-07-10T12:26:48.457 に答える
1

このようなことを考える最も簡単な方法は、次のようなことです。

var $ = require("jquery");
require("jquery-csv")($);

これは、次のようなこともできることを意味します。

module.exports = exports = function (jquery) {
    //You modify the jquery object here.
};

$ オブジェクトの変更は、jQuery プラグインの推奨事項に従って行う必要があります。あなたが言ったことについて、あなたはすでにそれらを認識していると思います。

誰かがもっと賢い方法を思いつくと確信しています:)しかし、これは今のところうまくいくはずです。また、変更された jquery オブジェクトを返し、それを最初にモジュールを含めたスコープの $ オブジェクトに割り当てることもできます。

于 2012-10-03T21:21:32.250 に答える
0

答えは思ったより簡単でした...

var $ = jQuery = require('jquery');
require('./jquery.csv.js');

変数/名前空間に割り当てずに「require」を呼び出すと、スクリプトのインポートと同じように機能します(つまり、グローバル名前空間に存在するオブジェクトを操作できます)。

最初の行は、jqueryを適切に初期化する処理を行います。それが完了すると、jquery-csvは、ブラウザで行うのと同じ方法で既存の「$」名前空間を変更できます。

2番目の割り当て「jQuery」が必要なのは、jquery-csvが「jquery」インスタンスへの参照を取得する場所だからです。これはおそらく「$」にのみ割り当てるように短縮できますが、「jQuery」はプラグインガイドラインがライブラリを参照するために指定する値です。

于 2012-10-03T23:03:30.557 に答える