私はまったく同じ問題に直面しました。そして、dojoドキュメントとソースコードをたくさん読んだ後、私はほとんど不可能であれば非常に難しいという結論に達しました。しかし、非常に簡単でエレガントな回避策があります。この問題を解決する方法を告げる前に、まず最初の場所(あなたがあなた自身の状況に解決策を調整することができます)に必要な回避策はあり:しかし、なぜ
まず問題は、リソースはによると
発見できています道場のビルドシステム
Reference Guideの概要セクション:彼らは、ファイル・システム上に存在しないため、
[The build system] “discovers” a set of resources and then applies a synchronized, ordered set of resource-dependent transforms to those resources. (…) When a resource is discovered, it is tagged with one or more flags that help identify the role of that resource. (…) After a resource is discovered and tagged, the system assigns a set of transforms that are to be applied to that resource.
だから要するに、その場で生成されたすべてのリソースは、ビルドシステムによって発見することができません。それらが発見できない場合は、それらをタグ付けすることはできず、それに変換を適用することはできません。特に、resourceTags
はそのようなリソースには呼び出されず、のレイヤーを比較して、プロファイルレイヤー定義のリストに入れることはできません。ところで、私の知る限りdocumentation to depsScan transformを理解するように、internStringsSkipList
のみリソースをスキップするために使用することができる
は、従来の表記法(dojo.something
、例えばdojo.moduleUrl
)を使用して指定されました。
第二の問題、プラグインのリゾルバは、物理ファイルを想定してい
表記dojo/text!/some/url
プラグインとしてdojo/text.js
コンポーネントを使用することを言います。私はthis ticketにこのノートを見つけた:
Every AMD plugin should have a plugin resolver in util/build/plugins
and have it registered in util/build/buildControlDefault
.
あなたはutil/build/plugins/text.js
(例えばon Github)を確認した場合、依存関係(dojo/text!
はmoduleInfo
に格納された後、その部分が)resources
ではないので、あなたは、エラーがスローされていることがわかります配列:
textResource = bc.resources[moduleInfo.url];
if (!textResource){
throw new Error("text resource (" + moduleInfo.url + ") missing");
}
これは、「発見」段階でリソースを検出できなかったためです。
困難な解決策では困難なソリューション
、それは、またはあなたがどのように変換depsScan
作品を変更する必要があり、動作しない場合があります。基本的に、depsScan
がdojo/text!/some/url
に出会うと、プラグインリゾルバを呼び出して依存関係が存在するかどうかをチェックします。 depsScan documentationから:
depsScan
のためのカスタムトランスフォームを含むように
transformJobs
を再定義することによって可能であるかもしれない
Once all dependencies are found, the transform ensures all dependencies exist in the discovered modules. Missing dependencies result in an error being logged to the console and the build report.
。詳細な情報については、util/build/buildControlDefault.js
(on Github)とthis forum postを参照してください。
簡単な回避策
だけリソースをロードするために、独自のプラグインを作成します。独自のプラグインが登録されたプラグインリゾルバ(上記第二の問題を参照)を持っていないと、コンパイル時に取得しますすべてはJSONリソースをロードします。これは、このようなプラグインの私の例である恐ろしい
warn(224) A plugin dependency was encountered but there was no build-time plugin resolver.
です動的に:
それはカスタムロード機能を追加して再利用します。これはthis dojo-toolkit forum postに投稿された別の例の適応です。そのコードはJSFiddleにあります。
define(["./json!/path/to/an/json"],
function(values){
return values;
});
あなたのプラグインはちょうど限り、あなたはどの(カスタムプラグインのリゾルバを指定していないとしてJSONとしてそれを解析せずにロードされたテンプレートを返す、とすることができます:私はこのようなプラグインを使用して、私のプロジェクトで
ファイルがディスク上に物理的に存在することが期待されます)、プロジェクトはうまくコンパイルされます。
Amiramix、私は同じ問題を抱えており、私はあなたの答えに従うことに苦労しています。私はあなたに直接連絡してもよろしいですか? –
確かに、私の個人的なウェブサイトを見つけることができます私の電子メールを見ることができます(他の手段を使って私に連絡したい場合を除きます)。 – Amiramix