requireJS的不稳定行为

时间:2013-09-16 13:19:11

标签: javascript jquery requirejs amd

我遇到了requireJS的一些问题,我不熟悉

我有这棵树 应用程序/

public/
 master.html
 js/
   main.js
   app.js
   lib/ 
      jquery.js
      require.js
   vendor
       upload/
             vendor/
               dependency_upload.js //a bunch of dependencies file
             ulpload.js
       slider/
             dependency_slider.js //a bunch of dependencies file
             slider.js
<{1>}文件中的

master.html

在我的<script data-main="js/main" src="js/lib/require.js"></script> 文件中

main.js

并且require(['js/lib/jquery.js']); require({ paths: { 'dependency_upload': 'vendor/upload/vendor/dependencies' } }, ['js/vendor/upload/upload.js'], function(App) { App.upload(); }); require(['js/app.js']); require({ paths: { 'dependency_slider' : 'vendor/slider/dependencies' } }, ['js/vendor/slider/slider.js'], function(App) { App.slider(); }); upload.js中的每一个都具有以下结构。这里slider.js分别代表上传和滑块

$myfunction

我有两个问题,

1)define(['dependency_$myfunction'],function() { function $myfunction(){ ... } return{ $myfunction: $myfunction } } ); 加载的行为不稳定:一次两次,js。顺便说一下,jquery is not recognizedupload.js共享依赖关系,并且这些共享依赖项中设置的slider.js的某些函数被认为是未定义的(可能某些文件被加载了两次?)。那么,我的slider.js用法是否正确?

1 个答案:

答案 0 :(得分:1)

模块加载是异步的,所以如果你真的需要在另一个模块之前加载jQuery,你必须做两件事之一:

1 - 使用jquery的require中的回调函数,这样在加载jquery之前不要尝试加载另一个函数:

require(['js/lib/jquery.js'], function($) {    
    require({
        paths: {
            'dependency_upload': 'vendor/upload/vendor/dependencies'
        }
    }, ['js/vendor/upload/upload.js'], function(App) {
        App.upload();
    });
});

2 - (这是首选方法)使用shim configuration告诉RequireJS,只要你请求upload.js,它就需要先加载jquery。