0

私は長い間javascriptアプリケーションに取り組んできましたが、最初は非常に小さく、私だけがそれに取り組んでいました。しかし、それはかなり大きくなっています。作業をスピードアップするために別の開発者を呼び込みたいと思います。

問題は、このアプリケーションが1つのjsファイル(15000行のコード)で構成されていることです。現在の状況でこのアプリを共同で使用すると、作業をマージするときに多くの悲惨な結果になります(私はgitを使用しています)。

このアプリは、ダグラスクロックフォードのbase2ライブラリに基づいて構築されています。また、DOM操作にjQuery、jQuery UI、Modernizrなどを使用します。

これは次のように構成されています。

App = {};
App.model = {};
App.view = {};
App.controller = {};

App.main = base2.Base.extend({
    // uses models, views, controllers
});

App.model.AbstractModel = base2.Base.extend({
    constructor: function(){ ... },
    someMethod: function(){ ... }
    // etc.
});

App.model.AModel = App.model.AbstractModel.extend({
    // override some method
    someMethod: function(){ ... }
});

タイトルにあるように、私の質問は次のとおりです。(どのように)RequireJSを使用して、他の開発者とのより簡単な協力を目的として、このアプリを個別のファイルで構成されるモジュール式にすることができますか?RequireJSは良い選択ですか、それとも別の道を進むべきですか?

4

1 に答える 1

1

はい、それは選択するのに良い方法だと思います。コードの品質と保守性が向上します。

  1. モジュールを別々のファイルに分割します
  2. モジュールごとに、他のモジュール間の依存関係を把握します
  3. 次のようなモジュールのコードを変更します

から

App.model.AModel = App.model.AbstractModel.extend({
    // override some method
    someMethod: function(){ ... }
});

// I'm using shortened syntax here 
// http://requirejs.org/docs/api.html#modulenotes
define(function (require) {
  // here you are listing dependencies as local closure variables
  var AbstractModel = require('model/AbstractModel');

  var AModel = AbstractModel.extend({
    // override some method
    someMethod: function(){ ... }
  });

  // here you are returning the module
  return AModel;
});

jQueryのような依存関係については、SoundCloudで、AMDモジュール定義でラップせずに、それらをグローバルとして(通常のスクリプトタグで機能する方法で)縮小および連結して含めることにしました。

また、おそらくapp.jsこれらすべてのモジュールを必要とし、アプリを開始するメインがあります。

require(
  ['models/amodel', 'views/main'/*, 'more', 'modules', … */], 
  function (Amodel, Main /*, more, modules */) {
    new Main({
       model: Amodel
    });
  }
);
于 2012-11-30T10:15:58.250 に答える