requirejs shim好像不能解决 引用的模块不是AMD规范的问题

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

阅读 8.6k
3 个回答
'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加载没发现问题

注意引入非amd模块的命名,需要与文件名一致,且路径也应该基于baseUrl,如a.js在baseUrl下的unit文件夹下,shim命名应该是‘unit/a’

新手上路,请多包涵

shim: {

    test: {
        //exports: '',  同时存在exports和init,以init为准
        deps: ['jquery'],
        // 主要看下面!!
        init: function(){
            return {
                a: a,//test文件内部的a方法
                b: b// test文件内部的b方法
            }
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题