几天前我遇到了一个问题,这意味着我需要 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 这样的一些严肃的加载器可以做到这一点,但我发现它们在这种情况下有点烦人:
define([
'jQuery',
'Underscore',
'Backbone',
'views/projects/list',
'views/users/list'
], function($, _, Backbone, Session, projectListView, userListView){
...太多的代码,只有很少的依赖。
我也不喜欢我应该修改一些脚本,所以当它应该返回 $ 时,它们会返回类似于 jQuery 的东西。
太节省我的时间并避免尝试所有加载程序,我创建了这个问题。
所以,最大的问题是,哪个 JS 加载器可以执行以下操作:
- 加载“深度”依赖项,就像我的示例一样,只有在加载所有依赖项和依赖项的所有依赖项(...等)时才会启动 callback() 。
- 占用空间小,就像拥有一个 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(){});
- 但我没有想靠我的悟性。