首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非AMD模块的R.js编译

非AMD模块的R.js编译
EN

Stack Overflow用户
提问于 2013-12-14 14:00:46
回答 1查看 251关注 0票数 0

我有非AMD骨干,非AMD下划线和非AMD jquery在我的项目。我还有很多不兼容AMD的第三方库。

用r.js和AMD模块一起编译的最好方法是什么?我应该开始把它们都包装到AMD模块中吗?

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

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

代码语言:javascript
复制
var _ = require("underscore")
var Backbone = require("backbone")

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

EN

回答 1

Stack Overflow用户

发布于 2014-01-06 06:55:23

为什么你认为backbone、underscore或jquery不兼容AMD?他们会的!只是有点开箱即用。您只需向main.js添加更多配置即可。例如:

代码语言:javascript
复制
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.

  • Use
  1. 包装你的CommonJs模块:

define(function (require) { var $ = require('jquery'); })

正如我测试的那样,这两种选择在RequireJs优化器中都能很好地工作。

尽管如此,我还是倾向于在main.js文件中使用填充选项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20580215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档