4

私は以下を使用する非常に大規模なプロジェクトで作業しています:

  1. script タグ付きの JavaScript ファイルを含むレガシー JSP ページ
  2. RequireJS を使用せずに他の JavaScript モジュールを使用するバックボーン モデルとビュー

これから開発するすべてのものに対して、jQuery、BackboneJS、および UnderscoreJS で RequireJS の使用を開始したいと考えていますが、すべてのレガシー JSP ページを書き直すためのリソースがありません。すでに開発したバックボーン モデルとビューを書き直す時間があるかもしれません。

問題は、レガシー コード (上記の 1 と 2 の両方) の場合、すべての JavaScript ファイルを巨大なファイルに含めて、ブラウザーに送信することです。この巨大なファイルは、新しい RequireJS テンプレートと共存できる必要がありますが、巨大なファイルの特定の部分を分離して、RequireJS を使用するテンプレートで使用できるようにするにはどうすればよいですか? ファイルのこの部分を使用するすべてのページを書き直したり、コードを複製したりする必要はありません。

ありがとう!

4

2 に答える 2

4

目の前の問題を完全に把握しているかどうかはわかりませんが、RequireJS のshimまたはmap関数が役立つと思います。

巨大な JavaScript ファイルから新しいモジュールに必要な部分を抽出します。次に、shim を使用して、巨大な JavaScript ファイルがこの新しいモジュールに依存していることを RequireJS に伝えます。何かのようなもの:

requirejs.config({
    shim: {
        'new-module': {
            deps: ['huge-javascript-file'],
            exports: 'NewModule'
    }
});

シムのドキュメント: http://requirejs.org/docs/api.html#config-shim

map 関数は、新しいコードの一部だけが古い巨大なファイルを使用する必要がある場合に役立ちます。このドキュメントをチェックしてください: http://requirejs.org/docs/api.html#config-map

于 2013-01-29T17:03:37.607 に答える
2

これを達成するための真の方法は 1 つではないと思いますが、グローバル スコープのコードの周りにモジュールの「ファサード」を定義することで、同様の問題に取り組みました。従来のスクリプトで というグローバル変数が定義されているとしますfoo。AMD モジュールを定義し、そこからその変数をエクスポートできます。

//foo.js
define(function() {
  return window.foo;
});

//bar.js
define(['foo'], function(foo) {
  //do something with foo
});

この方法では、既存のグローバルに定義されたコードの新しい部分を使用する必要があるたびに、1 行のファサードを記述するだけでよく、同じコードがグローバルに定義されることを期待する既存のコードを壊すことはありません。時間が経つにつれて、消費者コードを壊すことなく、実際の実装をモジュールに移動してリファクタリングできます。

于 2013-01-29T16:46:17.487 に答える