2

私が実際に行っていることを例として使用します。もちろんjQueryに依存するjQuery UIに依存するjqueryプラグインに依存するノックアウトカスタムバインディングがあります。別のプラグインに依存する別のファイルと、jQuery UI などに依存する別のファイルがあります。require.config.js には次のものがあります。

shim: {
    "jquery-ui": {exports: "$", deps: ["jquery"]},
    "jquery-plugin1": {exports: "$", deps: ["jquery-ui"]},
    "jquery-plugin2": {exports: "$", deps: ["jquery-ui"]}
}

これは機能し、対応するファイルで次のことができます。

define(["jquery-plugin1"], function ($) {

ただし、次のこともできます。

define(["jquery", "jquery-ui", "jquery-plugin1"], function ($) {

ファイルが両方のプラグインに依存する場合もあります。

// which one?
define(["jquery-plugin1", "jquery-plugin2"], function ($) {
define(["jquery", "jquery-ui", "jquery-plugin1", "jquery-plugin2"], function ($){

ノックアウト カスタム バインディング (何もエクスポートする必要がない) などの他の依存関係もある可能性があるため、次のようになる可能性があります。

define(["jquery-plugin1", "model1", "model2",
"ko-custom1", "ko-custom2", "ko-custom3",
"jquery-plugin2"],
function ($, m1, m2) {

このファイルは jQuery UI (jQuery に依存) にも依存する場合がありますが、どちらもプラグインを介して暗黙的に読み込まれます。

私の質問は、すべての要件を明示し (つまり、jQuery と jQuery-UI を に含めるdefine)、エクスポートを省略した方がよいのでしょうか、それともあまり詳細でないネストされた依存関係の処理が優先されるのでしょうか?

4

1 に答える 1

2

これは素晴らしい質問であり、モジュールが登録される前に依存関係が存在する必要があるため、AngularJS 依存関係の挿入などを使用する場合に非常に関連性があります。したがって、これは機能しません:

define(['angular'],function (angular) {
  return angular.module('myModule', ['mySubmodule']);
});

// Error: [$injector:nomod] Module 'mySubmodule' is not available!

AMD 依存関係も定義する必要があります。

define(['angular','./mySubmodule'],function (angular) {
  return angular.module('myModule', ['mySubmodule']);
});

主観的かもしれませんが、各モジュールに独自の依存関係を明示的に定義させ、requireJS に依存関係を解決させることで、モジュール性を壊す範囲外のモジュールが既に定義されているという信念に任せるよりも、簡単に推論できます。

これを行うことで、欠落している依存関係を再配線することなく、AMD モジュールを個別にテストできることもわかります。

于 2015-04-09T13:50:18.593 に答える