seajsを通じてJavaScriptのモジュール開発及びモジュールごとのロードを実現します。


seajsはJavaScriptのモジュール開発及びモジュールごとのロードを実現しました。煩雑なjs命名の衝突、ファイル依存などの問題を解決するために、JavaScript開発モジュール化を目的としており、楽にロードすることができます。
まずseajsがモジュール開発をどうやって行うかを見てください。seajsを使うには基本的に一つの関数「define」しかありません。

fn.define
= function(id,
deps, factory) {
//code of function…
}
define関数を使用してモジュールを定義し、CMDモジュールに従って仕様を定義します。一つのファイルはモジュールです。したがって、一つのjsファイルの中には一つのdefineしかありません。つまり、一つのファイルは一つのモジュールです。SeaJSではモジュールの概念はオブジェクトに向かっているクラスと少し似ています。モジュールはデータと方法を持ってもいいです。データと方法は公共またはプライベートとして定義できます。共通データと方法は別のモジュールで呼び出されてもいいです。
公式の例では、defineは一つのパラメータしか入ってこないです。一つの工場関数です。

define(function(require,
exports, module) {
//code of the module...
});
パラメータを見る前に、defineがどのようにパラメータを処理しているかを確認します。

fn.define = function(id, deps, factory)
defineで受信できるパラメータはそれぞれモジュールIDであり、モジュール配列及び工場関数に依存する。
一つのパラメータだけがあれば、factoryに値を与えます。
二つのパラメータがあれば、二つ目はfactoryに割り当てられます。最初にarrayであればdepsに値を割り当て、そうでなければidに値を与える。
3つのパラメータがある場合は、それぞれid、deps、factoryに値が割り当てられます。
公式の例によれば、モジュールIDは、デフォルトではjsファイルパスとして知られているfactoryパラメータだけを、公式のパラメータに従って伝達することが推奨されている。
工場の関数のパラメータを見に来ました。
require,export,module
  • require――モジュールローディング関数は、依存モジュールを記載するために使用されます。このパラメータによって他のモジュールへのロードが行われます。
  • export-インターフェースポイントは、データまたは方法を定義すると、外部に露出して呼び出される。このパラメータにより、このモジュールの方法を暴露する
  • module――モジュールのメタデータ。属性があるオブジェクトです。
  • module.id――モジュールのID。
  • module.dependencies――このモジュールに依存するすべてのモジュールのIDリストが格納されています。
  • module.export――exportsと同じ対象を指す。
  • factoryのパラメータの使用:
    
    define(function(require,
    exports, module) {
    var a = require('./a');//  a   
    exports.fun2= function(){
    alert("fun2");
    a.dosomething();
      } 
    
    }
    requireオブジェクトを使ってモジュールをロードしますが、正規表現を使って検証ロードしていますので、パラメータは特定の文字列でなければなりません。表現ではありません。
    seajsはrequireのパラメータに自動的に「.js」を入れてロードします。すなわち、拡張子の名前を書く必要はありませんが、場合によっては、seajsはこれに「.js」を追加しません。
    1.cssをロードする:
    
    require("./module1-style.css");
    2.パスには「?」が含まれています。 
    
    require(<a href="http://example/js/a.json?b=func" rel="external nofollow" >http://example/js/a.json?cb=func</a>);
    3.経路は「葃」で終わる:
    
    require(http://example/js/a.json#);
    exportを使用して外部に方法または属性を暴露する。露出属性にはいくつかの方法があります。例えば、上記の例は一つの方式です。
    returnを使う:
    
    define(function(require)
    {
    var data1 = 1; //    
    var func1 = function() { //    
    returna.run(data1);
    }
    //  
    return{
    data2: 2,
    func2:function() {
    return'hello';
    }
    }; 
    });
    Jsonオブジェクトに直接戻ります。
    
    define({
    data: 1,
    func:function() {
    return'hello';
    }
    });
    ページでseajsを呼び出します
    前に述べたseajsはモジュール開発と煩雑なファイル依存問題を解決するために用いられます。だから、すべてのファイル依存はrequireオブジェクトを通じてロードされます。あるいはrequire.async(./a)を使って非同期的にロードされます。
    注:require()であろうと、require.async()であろうと、第二のパラメータはコールバック関数であり、ファイルのロードが成功したときに呼び出すことができます。
    
    require.async('/path/to/module/file',function(m) {
    //code of callback...
    });
    このローディング依存の方法があったら、私達はもうページに大量の<script></script>ラベルを書く必要がなくて、一つだけ使ってもいいです。
    
    <script src="./sea.js" data-main="./init"></script>
    はい、ここではdata-main=「./init」は入り口モジュールであり、このモジュールをロードすることを表しています。反復的にその依存モジュールをロードしています。この属性を使うとseajs.useを省略できます。この後ろに言います。
    seajs.com figを使用してグローバル構成を行う:
    
    seajs.config({
    base:'path/to/jslib/',
    alias: {
    'app':'path/to/app/'
    },
    charset:'utf-8',
    timeout: 20000,
    debug:false
    });
    これはseajsの全体構成です。
    ベースアドレスのアドレス指定時のベースアドレスパスを表します。
    aliasは、長い一般的な経路に略語を設定することができる。
    charsetはjsをダウンロードする時scriptタグのcharset属性を表します。
    timeoutはダウンロードファイルの最大時間をミリ秒単位で表します。
    デバッグはデバッグモードで動作するかどうかを示します。
    seajs.useを使って入口モジュールをロードすると、javaのmain関数に相当します。
    
    //     
    seajs.use('./a');
    //    
    seajs.use('./a',function(a)
    {
    a.dosomething();
    });
    //     
    seajs.use(['./a','./b'],function(a,
    b) {
    a.dosomething();
    b.dosomething();
    });
    以下はそのオフィシャルからのサンプルのページを見てもいいです。基本的にsea.jsはどうやって使うのか分かります。
    
    <script src="../sea-modules/seajs/seajs/2.2.0/sea.js"></script>
    <script>
    // Set configuration
    seajs.config({
    base: "../sea-modules/",
    alias: {
    "jquery": "jquery/jquery/1.10.1/jquery.js"
    }
    });
    // For development
    if (location.href.indexOf("?dev") > 0) {
    seajs.use("../static/hello/src/main");
    }
    // For production
    else {
    seajs.use("examples/hello/1.0.0/main");
    }
    </script>
    //mian.js
    
    //hello/mian.js
    define(function(require) {
    var Spinning = require('./spinning');
    var s = new Spinning('#container');
    s.render();
    });
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。