2012-05-21 42 views
3

我目前正在构建一个应用程序,其中前端正在做很多繁重的工作。 为了保持一切整齐有序,我想使用requirejs。但是,要使用require.js,其所有模块都应该符合AMD标准。制作requirejs模块AMD兼容

这意味着每当我使用的模块更新时,我需要等待AMD兼容版本出现或自己创建一个(我目前不知道该怎么做)。

这是一个真正的关闭。

看着这个https://github.com/jrburke/backbone/blob/optamd/backbone.js在我看来,制作像Backbone AMD兼容模块并不像将插件封装到通用函数那样简单。

是否有一个或多或少的直接方式使模块符合AMD标准?

+0

退房更新的答案, /或https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#wiki-shim –

回答

2

那么他的版本是非常防弹的,所以它会在各种情况下运行。既然你知道你正在运行的环境,什么是可用/什么不是,那么你可以做出一些假设,让你做更直接的事情。

看看这个要点,我让bacbkonejs的AMD模块假设的jQuery,下划线和定义是在全球范围内,我不需要CommonJS的支持: https://gist.github.com/2762813

我只是添加

define(function() { 
    var obj = {}; 
    obj._ = window._; 
    obj.jQuery = window.jQuery; 

到顶端,

.call(obj); 
    return obj.Backbone; 
}); 

到底部。


感谢@SimonSmith将UseJS引入我的注意。 UseJS是一个AMD加载器插件,它可以让你在不修改它们的情况下加载非amd格式的模块。我没有用自己用还,但它看起来很有希望:https://github.com/tbranyen/use.js/

UPDATE

RequireJS 2.0现在直接支持你正在寻找通过垫片CONFIGS功能:https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#wiki-shim

+0

太棒了!谢谢!我期待着ES6,这确实需要标准化。 – nimrod

+0

顺便说一句,我想你的意思是返回obj._不返回obj.Backbone :) – nimrod

+0

更简单的使用use.js - https://github.com/tbranyen/use.js/ –