3

このエリアでたくさんの投稿や記事を見ました。それらのいくつかは、 requireJS を使用した
モジュラー Backbonejs アプリケーションの開発
TodoMVC
スタック オーバーフローの投稿で、ほとんどの賛成票が寄せられています。

したがって、jquery、backbonejs、およびその他のライブラリをモジュール化することは問題ありません。私の質問は、なぜ私はそれをしなければならないのですか? 各jsファイルでjqueryとbackbonejsを使用するため、各ファイルに以下のコードを追加することは私にとって余分な負担に思えます.

define([
    'jquery',
    'underscore',
    'backbone',
    'myFile1', 'myFile1'
], function ($, _, Backbone, module1, module2) {

以下のようにrequireJSを含める前に、それらをhtmlファイルに直接含めるべきではないのはなぜですか?

<script src="../lib/client/jquery.js"></script>
<script src="../lib/client/underscore.js"></script>
<script src="../lib/client/backbone.js"></script>
<script data-main="client/main" src="../lib/client/require.js"></script>

この場合、すべての js ファイルで jquery や backbonejs を定義する必要はありません。以下のように、独自の js ファイルを単独でモジュール化できます。

define([
    'myFile1', 'myFile1'
], function (module1, module2) {

この方法のデメリットは?これは正しいアプローチですか?私はrequirejsのルールに違反しましたか?

4

1 に答える 1

5

jQuery や Backbone などのモジュールは RequireJS モデルでは機能しないため、シムを適用しますdefine(。それらを定義するステートメントがないため、実際の Require モジュールと同様に機能するようにシムを適用する必要があります。

はい、あなたが言ったこと(グローバル名前空間にダンプするだけ)は機能します。「ルール」に違反していません。スクリプト タグを追加すると、コードがグローバル名前空間にダンプされるだけです。したがって、すべてのモジュールは、実際には上記の例の Backbone と jQuery にアクセスできます。

ただし、次の 3 つの欠点があります。

  • Require で得られることの 1 つは、依存関係が明示的であることです。これにより、モジュールが何かを必要とするたびに、それがわかっているため、依存関係の管理がより明確になります (たとえば、どのモジュールが jQuery に依存し、どのモジュールが依存しないかがわかります。 jQuery を使用しない新しいプロジェクトで安全に使用できるものはわかっています)。

  • もう 1 つのことは、コード全体で一貫性を保つことです。すべての依存関係をまったく同じ方法で宣言し、まったく同じ方法で使用し続けます。RequireJS シムを使用すると、jQuery や Backbone などのライブラリで行われているように動作し続けることができます。

  • 暗黙の依存関係があるため、コードを再利用したい場合 - RequireJS モジュールのに jQuery を含めると、モジュール jQuery をロードできないことを示す Require とは異なり、理解するのが必ずしも簡単ではない実行時エラーになります。 (そして、$ が定義されていない、さらに悪いことに、「[Object object] は関数ではありません」などのようなものではありません。

于 2013-08-31T07:30:23.850 に答える