requirejs和shim的配置

时间:2014-03-03 09:30:45

标签: javascript jquery requirejs shim

我有这种配置:

require.config({

    paths: {
        jquery: '../libs/jquery/dist/jquery',
        uicore: '../libs/jquery-ui/ui/jquery.ui.core',
        uiwidget: '../libs/jquery-ui/ui/jquery.ui.widget',
        uidialog: '../libs/jquery-ui/ui/jquery.ui.dialog'
    },

    shim: {
        uicore: ['jquery'],
        uiwidget: ['uicore'],
        uidialog: ['uiwidget']
    },

    urlArgs: "bust=" +  (new Date()).getTime()

});

require(['uidialog'], function (d) {
    console.log(d); // undefined;
});

那么,我的代码出了什么问题?为什么d未定义?每个文件都已下载,jquery的版本为2.1。

请帮助:(

2 个答案:

答案 0 :(得分:0)

引自Requirejs-getStarted

  

在main.js中,您可以使用require()加载任何其他脚本   需要跑。这确保了单个入口点,因为数据主要   您指定的脚本是异步加载的。

     

require([“helper / util”],function(util){       //加载scripts / helper / util.js时调用此函数。       //如果util.js调用define(),则直到触发此函数       // util的依赖项已加载,而util参数将保存       //“helper / util”的模块值。 });

我建议,例如:

require.config({
    baseUrl: 'js/lib',
    paths: {
        jquery: 'jquery-1.9.0'
    }
});

然后:

require(['jquery'], function( jq ) {
    console.log( jq ) // OK
});

您的配置中可能有错误的路径..

修改

你有没有尝试过:

define(['jquery'], function (jq) {
    return jq.noConflict( true );
});

答案 1 :(得分:0)

答案很简单:是导出$。像这样:

'ui.core': {
    deps: ['jquery'],
    exports: '$'
},
'ui.widget': {
    deps: ['ui.core'],
    exports: '$'
},
'ui.button': {
    deps: ['ui.core'],
    exports: '$'
},
'ui.dialog': {
    deps: ['ui.widget', 'ui.button'],
    exports: '$'
}