Maison > Questions et réponses > le corps du texte
requirejs shim好像不能解决 引用的模块不是AMD规范的问题
1:director.js这种库不是amd规范的,如果我不去改它的源码,把它用 define 包裹, 它就不能被正确的注入requirejs,利用shim api 也没办法解决这个问题。
2:我跑了官网的例子,backbone和underscore, shim 智能解决 他们依赖的问题,并没有像文档所说解决了它们不是AMD模块而转为支持AMD的问题。 其实他们不用shim 也是可以被正确注入的。
3:我简单看了一下requirejs的源码,它源码很难看懂,makeShimExports这个方法好像也不是解决支持非AMD模块的。。
希望有使用经验的朋友, 可以解答我的疑惑,感谢。
requirejs.config({
shim: {
director: {
exports: 'director'
}
}
});
require(['director'], function (director) {
console.log(director) // undefined
})
RequireJS 2.1.17
director.js 1.2.6
黄舟2017-04-10 15:06:14
'use strict'
require.config {
shim:{
director:{
exports:'Router'
}
}
}
require ['director'],(directorRouter)->
author = ()->
console.log "author"
books = () ->
console.log "books"
viewBook = (bookId) ->
console.log "viewBook: bookId is populated: #{bookId}"
routes = {
'/author': author
'/books': [books,()->console.log "An inline route handler."]
'/books/view/:bookId': viewBook
}
router = directorRouter(routes)
router.init()
用官网例子改写的 shim加载没发现问题
ringa_lee2017-04-10 15:06:14
注意引入非amd模块的命名,需要与文件名一致,且路径也应该基于baseUrl,如a.js在baseUrl下的unit文件夹下,shim命名应该是‘unit/a’