要求js shim不适用于此代码

时间:2013-01-31 05:42:01

标签: requirejs

我有以下代码。

<script src="js/libs/require.js"></script>
<script>
    requirejs.config({
        baseUrl:'js/modules/',
        paths:{
            'bbn':'../libs/backbone',
            'underscore':'../libs/underscore'
        },
        shim:{
            'bbn':{
                exports:'B',
                deps:['underscore']
            }
        }
    })  
    requirejs(['bbn'], function(B){
        console.log(B)
    });
</script>

函数参数B未指向Backbone。而是将其记录为undefined

我按照以下帖子到达了这一点:

Loading Highcharts via shim using RequireJS and maintaining jQuery dependency

我看到underscorebackbone JavaScript文件都在firebug中下载。

2 个答案:

答案 0 :(得分:5)

下划线也不是AMD兼容,所以请确保shim也是如此:

requirejs.config({
baseUrl:'js/modules/',
paths:{
    'bbn':'../libs/backbone',
    'underscore':'../libs/underscore'
},
shim:{
    'bbn':{
        exports:'Backbone',
        deps:['underscore']
    },
    'underscore': {
        exports: '_'
    }
}
})  
requirejs(['bbn'], function(Backbone){
console.log(Backbone)
});

你会看到下载的是Underscore,但因为它没有被定义为正确的模块,所以RequireJS只是将它视为普通的JS文件并且没有获得返回值

答案 1 :(得分:1)

Underscore的最新版本(编写本文时为~1.6.0)与AMD兼容。不要将它用作垫片,否则可能会遇到问题。