11

質問:AMDサポートを使用して(コンパイラを介して)jqueryをTypeScriptモジュールにインポートして、依存関係としてjqueryを含める方法はありますか?

重要なのは、インポートステートメントを取得することです。これにより、モジュールが定義ステートメントの依存関係になります(以下を参照)。

define(["require", "exports", 'dataservice', 'jquery', 'knockout'], 
    function(require, exports, __ds__, $ , ko) { 
         ...
    }
)

詳細:jquery(およびその他のサードパーティライブラリ)をAMDでTypeScriptモジュールとしてインポートしたい。目標は、それらを依存関係としてrequireリストに表示することです。ただし、これを行うためにTypeScriptを作成する唯一の方法は、importステートメントを持つことであるように見えます。また、インポートするには、インポートするモジュールが必要です。しかし...ポイントするjqueryモジュールはありません。に。

回避策

  1. require.jsのmain.jsで.d.tsとプリロードjqueryを参照できますが、それはすべてのサードパーティライブラリをプリロードすることを意味します。ひどいわけではありませんが、JavaScriptとAMDですでに実行できることを利用していないため、理想的でもありません。
  2. サードパーティのライブラリごとにモジュールを作成してラップすることはできますが、$。$のようなものが得られます。さらに悪いことに、IMO(およびIriskがこれらのそれぞれに間違ったモジュールコードを記述し、同期がとれていない)。

したがって、今のところ、main.jsにjqueryをプリロードしているだけです。しかし、繰り返しますが、これは理想的とは言えません。モジュールを持たないノックアウト、バックボーンなどのライブラリに対してこれを行う必要があります。

より良い提案や私が欠けているものはありますか?

更新/明確化:

ライブラリ間の依存関係については、構成でシムを使用することもできます。ただし、これでもサードパーティのものがプリロードされます。例:

require.config({
    baseUrl: '../',
    paths: {
        'jquery': 'lib/jquery-1.7.2',
        'underscore': 'lib/underscore'
    }, 
    shim: {
        jquery: {
            exports: '$'
        },
        underscore: {
            exports: '_'
        }
    }
});
4

1 に答える 1

4

もう 1 つの回避策は、requirejs の型定義を使用し、requireステートメントではなく独自のステートメントを使用するimportことです。

これの欠点はimport、コンパイラを変更するだけで TypeScript を AMD または CommonJS で使用できることですimport

確実に型指定された requirejsの既存の定義があります。

于 2012-12-30T13:01:17.840 に答える