Requirejs 非AMD模块的R.js编译

Requirejs 非AMD模块的R.js编译,requirejs,underscore.js,amd,r.js,Requirejs,Underscore.js,Amd,R.js,我的项目中有非AMD主干、非AMD下划线和非AMD jquery。我还有很多与AMD不兼容的第三方库 使用r.js让它们与AMD模块一起编译的最佳方式是什么?我应该开始将它们全部包装到AMD模块中吗 我在一个使用非AMD库、下划线和主干线的模块上运行了r.js,它生成了一个输出,但在输出中,只要有require(“主干线”)调用,它就会返回未定义的,我怀疑这是因为主干线没有注册为AMD模块 同时,对我来说非常奇怪的是,如果我不运行r.js,只是使用require.js加载定期运行网站,那么下面的

我的项目中有非AMD主干、非AMD下划线和非AMD jquery。我还有很多与AMD不兼容的第三方库

使用r.js让它们与AMD模块一起编译的最佳方式是什么?我应该开始将它们全部包装到AMD模块中吗

我在一个使用非AMD库、下划线和主干线的模块上运行了r.js,它生成了一个输出,但在输出中,只要有
require(“主干线”)
调用,它就会返回未定义的,我怀疑这是因为主干线没有注册为AMD模块

同时,对我来说非常奇怪的是,如果我不运行r.js,只是使用require.js加载定期运行网站,那么下面的行返回正确的值,即使它们不是AMD模块:

var _ = require("underscore")
var Backbone = require("backbone")

我在require.config中将这些路径配置为别名。

为什么您认为主干、下划线或jquery不兼容?是的!只是有点不合时宜。您只需要在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
公开),那么按照我的理解,您有两个选项:

  • 将CommonJs模块包装为
  • 使用此结构:

    
    定义(功能(要求){
    var$=require('jquery');
    })
    

  • 正如我测试的那样,这两个选项在RequireJs优化器中都很好地工作


    尽管如此,我还是希望在main.js文件中使用shim选项。

    也许您可以显示您的requirejs.config是什么?