RequireJS和CommonJS之间的区别
我想知道这些摘要之间的区别是什么。
var $ = require('jquery');var _ = require('underscore');
var BackBone = require('backbone');
和
require(['jquery','underscore','backbone'],function ($, _, BackBone){ //code goes here
})
两者对我来说都可以正常工作,但不能确定它们背后的目的是什么。
回答:
考虑第一个片段,它是CommonJS样式的:
var $ = require('jquery');var _ = require('underscore');
var BackBone = require('backbone');
这些调用是同步调用:require
返回时,它将返回您请求的模块。CommonJS
require
调用是同步的。有一种支持异步形式的建议,require
但据我所知,它尚未超出建议级别。Node.js
require.async
曾经被删除过。有一个实现它的包。使用此程序包看起来很像使用AMD样式模块。
现在,考虑第二个片段,它是AMD风格的:
require(['jquery','underscore','backbone'],function ($, _, BackBone){ //code goes here
})
回答:
异步的。您不能依赖的返回值require
来获取模块值。您必须改用回调。该define
调用以类似的方式工作,但是除了需要模块之外还定义了一个模块。
现在,如果您使用RequireJS,它提供的功能允许您在定义模块时使用任何一种样式,以便您可以定义如下模块:
define(['jquery','underscore','backbone'],function ($, _, BackBone){ //code goes here
});
或使用看起来更像CommonJS习惯的东西:
define(function (require) { var $ = require('jquery');
var _ = require('underscore');
var BackBone = require('backbone');
//code goes here
});
转换CommonJS样式模块以与RequireJS一起使用真的很容易:只需用define
上面的调用包装它即可。有一个工具可以帮助您进行转换。
在后台,RequireJS读取第二种形式的回调代码,并创建一个依赖项列表,以便最终将其解释为:
define(['require', 'jquery','underscore','backbone'], function (require) { var $ = require('jquery');
var _ = require('underscore');
var BackBone = require('backbone');
//code goes here
})
require
回调中的调用是同步的,这可能令人惊讶(假设AMD是异步的)。这是RequireJS对CommonJS样式的支持的一部分。RequireJS支持一种同步require
调用,但有以下警告:如果在调用sync
之前 已经 定义了模块require
,则sync require
返回模块的值,否则 立即 失败。也就是说,它不会 尝试
加载模块。因为RequireJS解释了一个使用CommonJS样式的模块定义,就像我在上面显示的那样-好像依赖项实际上是在define
参数中列出的-
那样,保证这些模块在同步调用时已经加载require
被制造。
除了能够在RequireJS中使用CommonJS模块(添加了包装器)之外,还可以在Node.js之类的CommonJS环境中使用为RequireJS设计的模块。例如,我已经使用node-
amd-loader加载了在Node.js中设计为AMD模块的模块。
以上是 RequireJS和CommonJS之间的区别 的全部内容, 来源链接: utcz.com/qa/433389.html