我做了一些意外发现,我能够将我的data-main 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文件
&#xA ;
这是requirejs的故意特征吗?还是一个bug?


我希望这不是一个bug。


我的requirejs.config的内容.js低于


 var require = {
 baseUrl:'/ js /',
路径:{
 'jquery':“lib / jquery / jquery”,
 'bootstrap':“lib / bootstrap / js / bootstrap”
 },
垫片:{
 'bootstrap':['jquery']
 },
地图:{
 '*':{
 'jquery':'jQueryNoConflict'
 },
 'jQueryNoConflict':{
 'jquery':'jquery'
 }
 }
}



 我在这里查看每个样本,看起来他们没有做我意外发现的事情。
& #xA;
 
答案 0 :(得分:1)
我已经能够使用RequireJS 2.1.20重现您的报告行为。您可以看到here执行检查的代码:
NA
if (isBrowser && !cfg.skipDataMain) {
//Figure out baseUrl. Get it from the script tag with require.js in it.
eachReverse(scripts(), function (script) {
循环以相反的顺序查看所有eachReverse
个元素。由于DOM的工作方式,只有在HTML中加载RequireJS的script
元素和之前的元素才会循环播放,因为HTML仍处于被解析过程中此代码执行时的浏览器。 (因此,加载RequireJS的元素之后的script
元素的DOM节点尚不存在。)循环中的函数搜索,直到它遇到script
元素script
。它可能是加载RequireJS的那个,也可能是之前的任何一个。
我不知道是否认为这是一个带有意外副作用的错误或功能。有人可能想要更改逻辑以检查data-main
元素的src
属性是否指向包含RequireJS的文件。然而,在我看来,这将是脆弱的。 (它不能只是一个简单的文件名比较,因为如果您决定更改文件名,代码将会中断。)
答案 1 :(得分:0)
您的data-main位于错误的脚本标记
<script type="text/javascript" src="requirejs.config.js"></script>
<script type="text/javascript" src="requirejs.js" data-main="theme"></script>
此外,您不需要.js
<!--when require.js loads it will inject another script tag
(with async attribute) for scripts/main.js-->
<script data-main="scripts/main" src="scripts/require.js"></script>
修改强>
Applogies ......我误解了这个问题。
我只是快速浏览了requirejs
源代码,其原因在于它找到了所有script
元素(document.getElementsByTagName('script');
)并迭代它们以找到data-main
属性。实际上理论上你可以使用data-main
定义多个脚本,并且它将加载所有脚本。