我有非AMD骨干,非AMD下划线和非AMD jquery在我的项目。我还有很多不兼容AMD的第三方库。
用r.js和AMD模块一起编译的最好方法是什么?我应该开始把它们都包装到AMD模块中吗?
我在一个使用非AMD库和下划线和backbone的模块上运行了r.js,它生成了一个输出,但在输出中,只要有require("backbone")调用,它就会返回undefined,我怀疑这是因为backbone没有注册为AMD模块。
同时,对我来说非常奇怪的是,如果我不运行r.js,只是使用require.js加载定期运行网站,下面的代码行返回正确的值,即使它们不是AMD模块:
var _ = require("underscore")
var Backbone = require("backbone")我在require.config中将这些路径配置为别名。
发布于 2014-01-06 06:55:23
为什么你认为backbone、underscore或jquery不兼容AMD?他们会的!只是有点开箱即用。您只需向main.js添加更多配置即可。例如:
require.config({
paths : {
jquery : 'jquery-2.0.3',
backbone: 'backbone',
underscore: 'underscore'
},
shim : {
underscore: {exports: '_'},
backbone: {deps: ['underscore'], exports: 'Backbone'}
}
});
require(['jquery', 'backbone'], function($, Backbone) {
console.log('Type of $: ' + typeof $);
console.log('Type of Backbone: ' + typeof Backbone);
});没有太多的库是完全不兼容AMD的(即不能通过RequireJs使用)。通过某些属性将自身暴露到全局范围的每个库都可以通过RequireJs使用。
但是如果你想使用CommonJs模块(通过module.exports公开),那么在我看来,你有两个选择:
用这个结构this.
define(function (require) { var $ = require('jquery'); })
正如我测试的那样,这两种选择在RequireJs优化器中都能很好地工作。
尽管如此,我还是倾向于在main.js文件中使用填充选项。
https://stackoverflow.com/questions/20580215
复制相似问题