6

レガシー アプリケーションがあり、アプリケーションの一部を個別の backbone.marionette アプリケーションにリファクタリングしました。全体をリファクタリングする時間も予算もありません。コードを管理しやすくしたいので、requirejs を思いつきました。

ほとんどのファイルは縮小され、一緒にマンジされます。

別のバックボーン モジュールで作業しながら、既存の JavaScript にアクセスできるこのタイプのハイブリッド ソリューションに requirejs を使用できますか?

4

1 に答える 1

8

バックボーンを使用する従来のコードベースで最近 Require.js を使い始めた者として、私はあなたの苦痛を感じています :-) 私はここにリストするアプローチの組み合わせを使用しました。

fileA.js と fileB.js があり、fileA.js を変更せずに、fileB.js を Require を使用するように変換したいとします。

  • グローバル空間を悪用する

    Require は、それを介してすべての変数をインポートすることを強制しません。Require 化されたファイルであっても、Require 化されていないコードと同じ方法でグローバル変数にアクセスできます。これは、fileA がグローバル/ウィンドウ名前空間にすべての変数を作成した場合 (以前に Require を使用していなかった場合に発生する可能性が非常に高い)、fileA が Require を使用するかどうかに関係なく、fileB はそれらにアクセスできることを意味します。

    これは、私のレガシーファイルのほとんどに対する私の解決策になりました。私はそれらをそのままにして、すべての新しい Require 化されたものをそれらの下に置きました。そうすれば、作成するすべてのグローバルは準備が整い、Require 化されたファイルが必要とするときに待機します。

    fileB が fileA に依存している場合はこれで問題ありませんが、逆の場合はどうでしょうか。また、Require は、新しいグローバル変数を作成することを妨げません。つまり、fileB は、それをグローバル空間に配置する意思がある限り、必要なものを fileA と共有できます。

  • 重複コード

    動揺しないでください。「DRY」コーディングの実践がいかに重要かを知っています。ただし、いくつかのファイルについては、Require 化された複製を作成することになりました。テンプレートのコンパイルを行うために Require 用の Handlebars プラグインを使用しているため、これが必要になりました。

    通常の非 DRY 問題に対処するために、古いファイルにコメントを追加して、「このファイルには何も追加しないでください。Require 化されたバージョンが「実際の」バージョンです」と効果的に述べました。私の計画は、元の古いファイルを最終的に削除できるようになるまで、徐々にサイトの多くを Require に変換することです。私たちは小さな店なのでうまくいきますが、大きな会社ではうまくいかないかもしれません.

  • リファクタリング

    これを避けたいとおっしゃいましたが、ちょっとしたリファクタリングを行うだけで、大きな効果が得られる場合があります。私は個人的にはほとんど何もリファクタリングしませんでしたが、いくつかの小さな調整が大幅に簡素化された場所がありました.

    全体として、リファクタリングは Require に切り替えた後に行うものだと考えています (時間をかけてゆっくりと Require 化されていないコードを "折り畳む" ため)。

  • シム

    Chchrist は、shim は「要求への途中」の問題を解決するための良い方法であると言っていますが、個人的にはそれらをまったく使用していないので、「それらを調べてください」以外にはあまり多くを語ることはできません。 、彼らはおそらく役立つでしょう」.

于 2012-07-24T20:04:50.497 に答える