Sencha Cmd コンパイラが追跡するメタデータには様々な使い方があり、本ガイドではそのうちいくつかを取り上げます。こうした使い方をするために、コンパイラは複数の異なる方法でメタデータをエクスポートしフォーマットしますが、これについても見ていきます。
前提条件
先に進む前に以下のガイドをご覧になることをお勧めします。
meta
出力データの生成
コンパイラが提供する新しい特徴の1つは、様々なフォーマットでメタデータをエクスポートできることです。この機能を使ってext.js
「bootstrap」ファイルが作成されます。ファイルには様々なクラスと、フレームワーク内のすべてのファイルに関するメタデータブロックが含まれます。
コンパイラがmeta
コマンドを使ってエクスポートできるメタデータの形式には次のものがあります。
- クラスのエイリアス
- クラスの別名
- ローダーパス
- ファイル名
- 定義
カスタムブートストラップを生成する
注意:このプロセスは、Sencha Cmdで作成されたアプリケーション用に自動的に処理されます。Sencha Cmdで作成されたアプリケーションを使用していない場合、このセクションでは同様の結果を手動で達成する方法を説明します。
meta
コマンドの第一義的な使い方は、独自の「bootstrap」ファイルの作成です。このファイルにより、フレームワークは、フレームワークコードと同様の認識レベルをお使いのアプリケーションコードについて持つようになります。
ブートストラップファイルは、マークアップファイルと一緒に保存すると管理が簡単です。うまくいかない場合は、読み進んで関連パスの管理方法をご覧ください。クラスパスのソースフォルダにマークアップファイルがある場合、コンパイラにブートアップファイルを無視するよう伝える必要があります。これは-ignore
スイッチで行います。
sencha compile -classpath=sdk/src,app -ignore bootstrap.js \
...
requires
でワイルドカードサポートを有効にする
"ext-debug.js"
の最後には2つの関数呼び出しが含まれます。
Ext.ClassManager.addNameAlternateMappings({
"Ext.draw.engine.ImageExporter": [],
"Ext.layout.component.Auto": [],
...
});
Ext.ClassManager.addNameAliasMappings({
"Ext.draw.engine.ImageExporter": [],
"Ext.layout.component.Auto": [
"layout.autocomponent"
],
...
});
requires
文でワイルドカードを使えるのは、この2つのメタデータがあるためです。すなわち、
Ext.define('MyApp.App', {
requires: [
'Ext.grid.*'
],
...
});
独自のコードでワイルドカードを使うために必要なのは、アプリケーションに同じブートストラップデータを提供することです。
このコマンドは次の動作を行うファイルを作成します。
sencha compile -classpath=app \
meta -alias -out bootstrap.js and \
meta -alt -append -out bootstrap.js
上のコマンドラインは、app
フォルダ内のソースを読み込むようコンパイラに伝え、2つのメタデータを生成します。2つ目のメタデータは1つ目と同じ出力ファイルに書き込まれますが、置き換えではなくファイルに追加する-append
オプションを使います。
いったん"bootstrap.js"
ファイルを作成したら、このようにページを変えてx-bootstrap
セクションに追加します。
<html>
<head>
<!-- <x-compile> -->
<!-- <x-bootstrap> -->
<script src="../sdk/ext-dev.js" type="text/javascript"></script>
<script src="bootstrap.js" type="text/javascript"></script>
<!-- </x-bootstrap> -->
<script src="app/app.js" type="text/javascript"></script>
<!-- </x-compile> -->
</head>
<body></body>
</html>
次のいずれかを行う場合は、"bootstrap.js"
ファイルを生成し直す必要があります。
- クラスの追加
- クラスの削除
- クラスのエイリアスの変更
- クラスの別名の変更
このブートストラップデータの再構築は様々なやり方で処理できますが、根本的な問題は、これらのファイルをソースコントロールに保持するか、開発者側でローカルに生成するよう要求するかということです。どちらも機能し、ある程度まで自動化できます。
注意:Sencha Cmdで作成されたアプリケーションの場合、sencha app build
の構築プロセスの一部として処理されます。あるいは、sencha app refresh
コマンドを使用すれば、フル構築する代わりにブートストラップだけを更新できます。
ローダーパスのエクスポート
大規模なアプリケーションでは、複数のソースツリーを使って名前空間を整理すると便利です。Ext JS自体は3つのソースツリーを使用しています。ただしこのやり方では、この作業のためにローダーパスを手動で設定する必要がある動的ローダーにとっては、常に問題がありました。しかしコンパイラは、クラスパス内のすべてのソースを与えられたクラス・ファイル間の関係を完全に把握しています。またmeta
コマンドは、お使いのアプリケーションで使えるようデータをエクスポートします。
すでに上のように"bootstrap.js"
を作成している場合は、meta
コマンドをさらに1つ追加すれば、このデータを追加できます(もちろんこのケースではクラスパスに複数のフォルダが含まれます)。
sencha compile -classpath=src1,src2,src3 \
meta -alias -out bootstrap.js and \
meta -alt -append -out bootstrap.js and \
meta -loader -append -out bootstrap.js
これで"bootstrap.js"
ファイルが両方の問題を解決します。このやり方では、次の場合に"bootstrap.js"
を再構築する必要があります。
- ファイル名またはフォルダ名の変更
- クラスパスの再編成
- いずれかのソースツリーの内容の再編成
注意:この部分はまた、Sencha Cmdで作成されたアプリケーション用に自動的に処理されます。
-base-path
で関連パスを解決する
多くの理由から、パスは関連性を持つ必要があります。しかし関連パスを扱う場合は常に、これらの関連パスがどこをベースにしているかという問題を解決する必要があります。上の例では、少しごまかして"bootstrap.js"
ファイルをマークアップファイルの隣に配置しました。これは、meta
コマンドが、デフォルトで出力ファイルの場所にベースフォルダを設定することを利用しています。
これとは違う場合、meta
コマンドに、関連パスを決定するためのベースを伝える必要があります。"bootstrap.js"
ファイルを"build"
フォルダに移動する場合を考えてみましょう(ソースコントロールに保持していない場合などの理由が考えられます)。ページが現在のフォルダにあり、ソースが"app"
フォルダにあるので、これにより適切な関連パスが生成されます。
sencha compile -classpath=src1,src2,src3 \
meta -alias -out build/bootstrap.js and \
meta -alt -append -out build/bootstrap.js and \
meta -loader -append -base-path . -out build/bootstrap.js
-alias
および-alt
モードがパスを扱わないため、-base-path
オプションは、meta
コマンドの-loader
としての使い方でのみ必要となります。
フォーマットの変更
デフォルトでは、meta
コマンドは、メタデータのタイプに適した関数呼び出しラッパーを使って、メタデータをJSONPフォーマットでエクスポートします。別の関数呼び出しが望ましい場合、つまりJSONフォーマットでデータがほしい場合は、meta
コマンド内でこれを要求します。
下の例では、aliases.json
ファイルがJSONフォーマットのエイリアスデータを含んでいます。このケースでは、JSONフォーマットが単一のトップレベルのオブジェクトまたは配列を要求しているため、-append
は使えません。
sencha compile -classpath=src1,src2,src3 \
meta -alias -json -out aliases.json
次の例では、次を呼び出す関数を供給してJSONPラッピングをカスタマイズします。
sencha compile -classpath=src1,src2,src3 \
meta -alias -jsonp Foo.bar.doAliases -out aliases.js
この形式はJavaScriptコードを生成するため、-append
と一緒に使えます。上の出力は、だいたい次のように見えます。
Foo.bar.doAliases(
// ... the JSON data ...
);
ファイル名のエクスポート
meta
コマンドがサポートするメタデータの形式で、時々便利なものにファイル名データがあります。それは適切な依存関係順に並んだファイルのリストです。このデータは多くの点で他のメタデータ形式と同じで、JSONまたはJSONPフォーマットでエクスポートでき、-append
を使って結合できます。
-filenames
の第一の相違点は、デフォルトのフォーマットがテキストだということです。JSONまたはJSONPを生成するには、-json
または-jsonp
オプションのいずれかを指定しなくてはなりません。
デフォルトのテキストモードでは、ファイル名はテキスト行として書かれ、1行に1つのファイル名があります。次のコマンドは"filenames.txt"
を作成します。
sencha compile -classpath=src1,src2,src3 \
meta -filenames -out filenames.txt
ファイルの各行は-tpl
オプションを使って修飾できます。この例では特殊文字が必要なため、テンプレートを保有するレスポンスファイルを使います。これを次のように、"template.txt"
に入れます。
<script src="{0}" type="text/javascript"></script>
それから次のコマンドを実行します。
sencha compile -classpath=src1,src2,src3 \
meta -filenames -tpl @template.txt -out filenames.txt
これで、すべてのファイルに正しい順序で script タグを挿入するマークアップ群ができました。
例:
<script src="ext/src/ShadowPool.js" type="text/javascript"></script>
<script src="ext/src/Shadow.js" type="text/javascript"></script>
定義のエクスポート
コンパイラは通常、ソースコードをパースすることで、クラス、名前空間および依存関係などのメタデータを読み取ります。これが、例えばライブラリの難読化などで非表示の場合、コンパイラは定義クラスや依存関係を認識しません。
この形式のメタデータエクスポートは、そうしたライブラリの「シンボル」を提供するために使われ、Sencha Cmdを使ってユーザーがアプリケーションをコンパイルできるようにします。
sencha compile -classpath=src1,src2,src3 \
meta -definitions -out symbols.js
上記では、次のようなディレクティブを含むファイルを作成します。
// @define Foo.bar.Thing
// @require Ext.panel.Panel
// @uses Ext.layout.container.HBox
これらのディレクティブはコンパイラにより認識され、ユーザーコードのコンパイルに必要なシンボリック名を導入します。これらのシンボルが難読化されたライブラリファイルに追加され、ライブラリコードが確実に正しい順序で連結されるようにします。