1

AMD 以外の必要なアプリケーションでライブラリ ( Google の libphonenumber )を使用しようとしています。これを消費する最良の方法は何ですか?次のようなモジュールを作成できることはわかっています。

define(['module'], function (module) {
    // insert and return library code here.
});

しかし、それは素晴らしいことではないようです。それを機能させるには、コードの一部をリファクタリングする必要があるようです (たとえば、すべてをオブジェクトに変換し、そのオブジェクトを返します)。ウィンドウ オブジェクトでモジュールを定義してそれを返す、すぐに呼び出される関数を使用する別のパターンを使用している多くのライブラリを目にします。

(function() {

    var phoneformat = {};

    window.phoneformat = phoneformat;

    if (typeof window.define === "function" && window.define.amd) {
        window.define("phoneformat", [], function() {
            return window.phoneformat;
       });
    }

})();

**更新**これを行わない理由はありますか?

define(['lib/phoneformatter'], function(phoneformatter) {

});

すべてのメソッドにアクセスできますが、定義でライブラリをラップしなかったため、グローバルになっているようです...

4

2 に答える 2

3

RequireJS のshimを使用します。こんな感じになります

requirejs.config({
  shim: {
    'libphonenumber': {
      exports: 'libphonenumber' // Might not apply for this library
    }
  }
});

libphonenumberこれにより、その変数がロードされ、グローバルスコープに配置されます

于 2014-06-30T19:01:30.417 に答える
2

これは私のために働いた:

define(['module'], function (module) {
    // insert and return library code here.
});

「モジュール」が必要な理由は完全にはわかりません。しかし、それなしでは機能しません。また、次のようにオブジェクトとアタッチされた関数を返しました。

return {
    countryForE164Number: countryForE164Number,
    nextFunction: nextFunction,
    // more functions as needed.
}

「モジュール」の使用に関するドキュメントはあまりありませんが、私が確認できることから: モジュールは、requireJS コアによって処理される特別な依存関係です。モジュール ID と現在のモジュールの場所に関する情報が表示されます。したがって、構成のパスを台無しにした可能性は十分にあります。

于 2014-07-02T17:59:02.250 に答える