2012-07-24 13 views
6

私はレガシーアプリケーションを持っており、アプリケーションの一部を別のバックボーン.marionetteアプリケーションにリファクタリングしました。私はすべてのものをリファクタリングするための時間や予算を持っていないし、私のコードを管理しやすくして、requirejsを考えるようにしたい。RequireJSとレガシーアプリケーション

ほとんどのファイルは、縮小されてまとめられています。

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

+0

はい、shim configオプションを使用して、非amdファイルをamdとして有効にできます – chchrist

答えて

8

私はちょうどレガシーバックボーンを使用しているコードベースでRequire.jsを使用し始めたばかりですが、私はあなたの痛みを感じます:-)私はここに挙げるアプローチの組み合わせを使用しました。

のはfileA.jsを変更せずに、あなたがfileA.jsとfileB.jsを持っている、とあなたが使用するfileB.jsを変換する必要ましょう:

が必要

  • 虐待グローバル空間それを介してすべての変数をインポートする必要はありません。 Require-ifiedファイルでも、Require-ified以外のコードと同じ方法でグローバル変数にアクセスすることができます。つまり、fileAがその変数をグローバル/ウィンドウの名前空間に作成すると、fileAがRequireを使用するかどうかにかかわらず、fileBはその変数にアクセスできます。

    これは、私の以前のファイルの大部分の解決策です。私はちょうどそのままにしておき、新しいRequire-ifiedものをそれらの下に置きます。こうすることで、Require-ifiedファイルが必要なときに、作成するすべてのグローバルが準備完了と待機状態になります。

    fileBがfileAに依存する場合はこれが最適ですが、逆の場合はどうなりますか?まあ、requireは新しいグローバル変数を作成するのを妨げるわけでもありません。つまり、fileBはfileAで必要なものをグローバル空間に置くことができる限り、共有することができます。

  • 重複コード

    怒るしないでください。私は、「DRY」コーディングの重要性がどれほど重要かを知っています。しかし、ほんの数ファイルのために、私が何をしていたのかは、要求が重複したものにすることでした。私はテンプレートのコンパイルを行うために必要なためにHandlebarsプラグインを使用しているので、これが必要です。ハンドルバーを使用するファイルが必要な場合は、それを必要とする必要がありました。

    普通のDRYの問題と戦うために、私は古いファイルに「このファイルに何も追加しないで、必要なバージョンは本当のバージョンです」というコメントを効果的に追加しました。私の計画は、元の古くなったファイルを最終的に削除するまで、サイトの多くを時間の経過とともにゆっくりとRequireに変換することです。私たちには小さな店があるので、それは私たちのために働きますが、大企業ではこれは飛ばないかもしれません。

  • は、私が知っている

    をリファクタリング、あなたはこれを避けたかったと述べたが、時には少しリファクタリングは、あなたの降圧のためにあなたの強打の多くを与えることができます。私は個人的にほとんど何もリファクタリングしませんでしたが、ちょうど2つの場所で、小さな調整が大幅に簡略化されました。

    全体的に、リファクタリングは、「Require」に切り替えた後に何かとしています(ゆっくり時間をかけて、必要でないコードを「折りたたみ」に持っていく)。

  • シム

    Chchristは、シムは問題はしかし、私は個人的にすべてのそれらを使用しませんでした「を必要とするハーフウェイ」を解決するための良い方法であることを言うには正しいので、私は本当にすることはできません「彼らを見てみると、おそらく役に立つだろう」という点を除いて、多くのことが言えます。

関連する問題