问题在于,我包含一个脚本,它使用另一个脚本,但如果该依赖项还需要另一个脚本准备好怎么办?这意味着加载它是不够的,但我还需要确保在执行之前调用了它的初始化回调。如果允许依赖关系需要更多依赖关系并在加载后将它们显示出来,那么DOM中脚本标记的顺序可能不正确。
当脚本和依赖项需要多个依赖项或文件满足多个组件时,问题会变得更加复杂。
使用.js似乎有一个很好的方法,但首先,依赖关系应该在加载之前知道,其次作者声明一些测试不再适用于Firefox。我怀疑这是阻止执行的事情,这看起来有点神奇。
我已经编写了一个加载器来处理这个,完全异步,实际上似乎是有效的。但我无法撼动做某事的直觉,以前已经解决了,或者不能那么复杂。
答案 0 :(得分:2)
如果允许依赖项需要更多依赖项并在加载后显示它们,那么DOM中脚本标记的顺序可能不正确。
那么,这些脚本试图加载自己的依赖项究竟是什么呢?这不是JavaScript的标准功能,因此没有一个答案;你如何应对它是特定的尝试包含依赖的脚本。
对于同步加载的脚本(通过document.write包含或在加载时将脚本元素添加到DOM),您至少可以确保自己很好地上传。对于异步加载(延迟脚本,AJAX包含或由超时触发的ready-callbacks),必须有一个回调机制。如果您正在混合具有不同依赖性和就绪回调系统的各种脚本,那将会非常痛苦。
我已经编写了一个加载器来处理这个,完全异步,实际上似乎是有效的。但我无法撼动做某事的直觉,以前已经解决了,或者不能那么复杂。
不,不是真的。依赖性处理和动态脚本插入总是有点复杂。唯一“解决”的标准方法是完全静态脚本,手动以依赖顺序编写它们。
答案 1 :(得分:2)
答案 2 :(得分:0)
我有偏见但我最近创建了一个名为Pyramid的javascript依赖关系管理器。它似乎与其他依赖管理器类似(并且可能与您创建的相似),除了一些关键功能。
Pyramid Dependency Manager documentation
一些示例代码,用于说明它在开发过程中的工作原理。
文件: dependencyLoader.js
//Set up file dependencies
Pyramid.createOrUpdate({
name: 'standard',
files: [
'standardResources/jquery.1.6.1.min.js'
]
});
Pyramid.createOrUpdate({
name:'lookAndFeel',
files: [
'styles.css',
'customStyles.css'
]
});
Pyramid.createOrUpdate({
name:'main',
files: [
'createNamespace.js',
'views/buttonView.view', //contains just html code for a jquery.tmpl template
'models/person.js',
'init.js'
],
dependencies: ['standard','lookAndFeel']
});
Html文件
<head>
<script src="standardResources/pyramid-1.0.1.js"></script>
<script src="dependencyLoader.js"></script>
<script type="text/javascript">
Pyramid.load('main');
</script>
</head>