代码如下:
requirejs.config({
paths: { }
,shim: {
'backbone': {
deps: ['underscore', 'jquery']
,exports: 'Backbone'
}
,'localstorage': {
deps: ['backbone']
}
,'bootstrap': ['jquery']
,'underscore': {
exports: '_'
}
}
,packages: [
{
name: 'jquery'
,location: 'libs'
,main: 'jquery-2.0.2.min'
}
,{
name: 'bootstrap'
,location: 'bootstrap'
,main: 'bootstrap'
}
,{
name: 'backbone'
,location: 'backbone'
,main: 'backbone'
}
,{
name: 'underscore'
,location: 'underscore'
,main: 'underscore'
}
,{
name: 'backbone.localstorage'
,location: 'backbone.localstorage'
,main: 'backbone.localstorage'
}
,{
name: 'react'
,location: 'react'
,main: 'react'
}
]
});
requirejs(['require', 'underscore', '/js/backbone/backbone.js'],function(require, _, B){
var bac = require('/js/backbone/backbone.js');
console.log(B)
//console.log(bac)
})
===========================================
更新
几位的答案都给提供了一些思路,现在已经解决。但是遗憾不能采用多人答案,非常感谢。
由于我的 Backbone 等都不是和 main 放在同级目录,requireJs 默认会在同级目录下找文件,除非定义了 paths。现在加上 paths 就好了。另外我用的 Backbone 不是最新版,而是 1.0.0 版本,所以还是要加上 shim。而且我这里 packages 的用法也是错误的。
还是没有仔细看文档,今天又翻了一下文档,瞬间明白了许多。
因为你require的时候用的模块名是
/js/backbone/backbone.js
,没有用上前面的shim
配置,Backbone又没有带amd兼容,所以拿不到引用更新,backbone新版带了不甚标准的amd兼容(define但没有返回引用而还是全局暴露backbone),因为没有返回引用所以还是要shim