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

 捕鱼达人qq怎么刷金币 发布于 2022-11-22 23:26

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

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

    2022-11-22 23:55 回答
  • '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加载没发现问题

    2022-11-22 23:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有