RequireJS:“ requirejs”和“ require”函数之间的区别


80

我正在使用requireJS2.x。我发现有些教程(和官方文档)有时会使用

requirejs.config({ [...] });
requirejs(["module"]) ...

有时

require.config({ [...] });
require(["module"]) ...

这两个函数(require和requirejs)之间有什么区别吗?我在文档中找不到关于此的任何单词。:(

Answers:


86

他们是完全一样的。

原因是某些环境可能已经有一个require,在这种情况下RequireJS不会覆盖它,并允许通过以下方式使用该库requirejs

看到这个提交-https: //github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39


15
谢谢:)应该在文档中注明。代码中的注释并不清楚。
Matthias Bayer

我同意,这令人困惑(甚至“正式”的requirejs页面在用法和示例之间也存在不一致)。很高兴知道他们是同一个人。
比尔·西姆瑟

在浏览器中使用CommonJS(通过webpack或browserify)意味着在这种情况下,您也可以requirejs像访问require本地变量一样访问。我发现这在React组件中很有用,可以在中加载其他脚本componentDidMount
西蒙·史密斯

1
好的库,令人困惑的文档。甚至“ API”部分也不是API,而是更多的“食谱”。有很多教程比正式文档更容易上手。
Hal50000 2015年

20

requirejsrequire相同吗?

作为RequireJS 2.1.15的,requirerequirejs在全球空间确实是“如出一辙”,因为可以通过这个测试,你可以在控制台执行得到证实:

> require === requirejs
true

测试返回的结果true告诉您它们是完全相同的功能对象。它们不是碰巧具有相似或相同代码的两个函数。它们是同一对象,同一时期。

注意,但是,当您执行时define(['require'], function (require) {require传递给函数通常不同于global require

您应该使用require还是requirejs

这取决于。RequireJS是AMD装载机,但不是镇上唯一的装载机。如果您要编写符合AMD规范100%的代码,以便使用您代码的人可以使用他们想要的任何加载程序而不必修改您的代码,则应require在全局级别使用,因为requirejs特定于RequireJS。另一个AMD装载程序将不对其进行定义。AMD规范定义require但不定义requirejs

如果要加载其他定义全局的内容,require则必须requirejs在全局级别使用以避免冲突。

在模块内部,始终用于define获取对的引用require。无论全球范围是否存在冲突,您都应该这样做。


2

好吧,它们的确可能是“完全相同”。然后让我们集中讨论为什么要使用一个相对于另一个...

尚不清楚应该被视为“最佳实践”的是什么:如果requirejs提供了额外的保证“如果某些环境可能已经有需求”,那么始终使用requirejs函数来定义一个require配置不是一个好主意。比require函数?

另外,如果发生了无法想象的事情,并且所讨论的环境不仅已经定义了“ require”,而且还定义了“ requirejs”,会发生什么?这是否意味着我们也应该有一个requirejsjs?等等...?


1
从技术上讲,$和和jQuery一样。只是为了提供后备,并在环境已使用的情况下成为好公民require。这是一个非常好的例子,建议使用require,但不是必须的-github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables-
Simon Smith,

0

他们是Same Open网站,已加载要求

然后打开Chrome控制台

在控制台中键入require,然后按Enter

在控制台中键入requirejs,然后按Enter

您会发现它们是相同的功能,但名称不同

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.