数日前、JS ローダーが必要という問題に遭遇しました。
次のファイルがあります。
#c.js
var c = {//something};
#b.js
var b = Object.create(c);
#main.js
var a = Object.create(b);
a.foo = 'bar';
このファイルを「c.js」から順番にロードする必要があります。
私はjsローダーについて簡単な調査を行い、それらの多くは私の例のような深い依存関係では機能しない(または機能しますが醜い方法で)ことがわかりました。 、特定の依存関係の依存関係を心配することなく(あなたが今何を意味するのか)。
requireJs のようないくつかの深刻なローダーはそれを行うことができますが、私はそれらがそのような場合の b/c で少し面倒だと思います:
define([
'jQuery',
'Underscore',
'Backbone',
'views/projects/list',
'views/users/list'
], function($, _, Backbone, Session, projectListView, userListView){
...ほんの少しの依存関係に対して、コードが多すぎます。
また、スクリプトを変更する必要があるのは好きではないので、$ を返す必要がある場合、jQuery のようなものを返します。
時間を節約し、すべてのローダーを試すのを避けるために、この質問を作成しました。
したがって、大きな問題は、どの JS ローダーが次のことを実行できるかということです。
- 私の例のように、すべての依存関係と依存関係のすべての依存関係 (...など) が読み込まれたときにのみ callback() が起動されるときに、「深い」依存関係を読み込みます。
- 依存関係リストとコールバックを備えた 1 つの reuqire 関数を持つように、小さなフットプリントを持ち、「コールバック」を返して何かを渡す必要はありません (通常、ga、gb、gc などの独自の名前空間があるため)。
私がそれを見たいと思ういくつかの例:
#c.js
require([], function(){
var c = {//something};
});
#b.js
require(['c.js'], function(){
var b = Object.create(c);
});
#main.js
require(['b.js'], function(){
var a = Object.create(b);
a.foo = 'bar';
});
*私の英語でごめんなさい。
Ps - 実際には、私は独自のローダーを作成しました。これは、特定のことを行い、$script.js よりも小さい (580 バイト) ですが、何かが必要な場合は、現在のスクリプトのファイル名をこのように渡す必要がありますrequire('main.js', ['b.js'], function(){});
- しかし、私はしません私の実現に頼りたいです。