我做了一个偶然的发现,我能够将我的数据主js文件加载到一个不加载requireJS的文件中
<script type="text/javascript" src="requirejs.config.js" data-main="theme.js"></script>
<script type="text/javascript" src="requirejs.js"></script>
它完美地加载了我的theme.js文件
这是requirejs的故意功能吗?还是一个错误?
我希望这不是一个错误。
我的requirejs.config.js的内容如下
var require = {
baseUrl: '/js/',
paths: {
'jquery': "lib/jquery/jquery",
'bootstrap': "lib/bootstrap/js/bootstrap"
},
shim: {
'bootstrap': ['jquery']
},
map: {
'*': {
'jquery': 'jQueryNoConflict'
},
'jQueryNoConflict': {
'jquery': 'jquery'
}
}
}
我在这里检查了每个样本,似乎它们没有做我意外发现的事情。
我已经能够使用RequireJS 2.1.20重现您的报告的行为。您可以在此处看到执行检查的代码:
if (isBrowser && !cfg.skipDataMain) {
//Figure out baseUrl. Get it from the script tag with require.js in it.
eachReverse(scripts(), function (script) {
该eachReverse
循环查找所有script
以相反的顺序元素。由于DOM的工作方式,仅循环script
加载RequireJS的元素以及HTML中之前加载这些元素的元素,因为执行此代码时HTML仍在被浏览器解析的过程中。(因此,script
加载RequireJS的元素之后的元素的DOM节点尚不存在。)循环中的函数搜索直到遇到具有的script
元素data-main
。可能是加载了RequireJS的那个,也可能是之前的任何一个。
我不知道是将其视为错误还是具有意外副作用的功能。可能需要更改逻辑以检查元素的src
属性是否也指向包含RequireJS的文件。但是,在我看来,这将是脆弱的。(这不能只是简单的文件名比较,因为如果您决定更改文件名,代码将会中断。)script
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句