seajsを通じてJavaScriptのモジュール開発及びモジュールごとのロードを実現します。
5218 ワード
seajsはJavaScriptのモジュール開発及びモジュールごとのロードを実現しました。煩雑なjs命名の衝突、ファイル依存などの問題を解決するために、JavaScript開発モジュール化を目的としており、楽にロードすることができます。
まずseajsがモジュール開発をどうやって行うかを見てください。seajsを使うには基本的に一つの関数「define」しかありません。
公式の例では、defineは一つのパラメータしか入ってこないです。一つの工場関数です。
一つのパラメータだけがあれば、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のパラメータの使用:
seajsはrequireのパラメータに自動的に「.js」を入れてロードします。すなわち、拡張子の名前を書く必要はありませんが、場合によっては、seajsはこれに「.js」を追加しません。
1.cssをロードする:
returnを使う:
前に述べたseajsはモジュール開発と煩雑なファイル依存問題を解決するために用いられます。だから、すべてのファイル依存はrequireオブジェクトを通じてロードされます。あるいはrequire.async(./a)を使って非同期的にロードされます。
注:require()であろうと、require.async()であろうと、第二のパラメータはコールバック関数であり、ファイルのロードが成功したときに呼び出すことができます。
seajs.com figを使用してグローバル構成を行う:
ベースアドレスのアドレス指定時のベースアドレスパスを表します。
aliasは、長い一般的な経路に略語を設定することができる。
charsetはjsをダウンロードする時scriptタグのcharset属性を表します。
timeoutはダウンロードファイルの最大時間をミリ秒単位で表します。
デバッグはデバッグモードで動作するかどうかを示します。
seajs.useを使って入口モジュールをロードすると、javaのmain関数に相当します。
まず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
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();
});
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。