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

82

我正在使用 requireJS 2.x。我发现有些教程(包括官方文档)有时使用

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

有时候

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

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

4个回答

88

16
谢谢 :) 这应该在文档中注明。代码中的注释并没有说明这一点。 - Matthias Bayer
我同意,这很令人困惑(即使“官方”的requirejs页面在用法和示例之间也存在不一致)。知道它们是一样的很好。 - Bil Simser
在浏览器中使用CommonJS(通过webpack或browserify),意味着您可以访问requirejs,因为require已经是该情况下的本地变量。我发现这在React组件中很有用,可以在componentDidMount中加载其他脚本。 - Simon Smith
1
优秀的库,文档却令人困惑。即使是“API”部分也不是真正的API,更像一本“烹饪书”。有很多教程比官方文档更好地帮助人们入门。 - Hal50000

20

requirejsrequire是一样的吗?

从RequireJS 2.1.15开始,全局作用域中的requirerequirejs确实是"完全相同的",可以通过在控制台执行以下测试来证明:

> require === requirejs
true

测试返回true表明它们是完全相同的函数对象。它们不是两个具有类似或相同代码的函数。它们就是同一个对象,没有别的。

然而需要注意的是,当您执行define(['require'], function (require) {时,传递给函数的require通常与全局require不同。

应该使用require还是requirejs

这要看情况。RequireJS是一种AMD加载程序,但并不是唯一的加载程序。如果您想编写符合AMD规范100%的代码,以便使用您的代码的人可以使用任何加载程序而无需修改您的代码,则应在全局级别使用require,因为requirejs是特定于RequireJS的。另一个AMD加载程序不会定义它。 AMD规范定义了require但未定义requirejs

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

在模块内部,始终使用define来获取对require的引用。无论全局空间是否存在冲突,您都应该这样做。


2

好的,它们确实可能是“完全相同”的。那么让我们专注于为什么你会使用其中之一...

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

此外,如果不可想象的事情发生了,并且所涉及的环境不仅已经定义了“require”,而且还定义了“requirejs”,那么这是否意味着我们也应该有一个requirejsjs呢?等等...?


1
从技术上讲,它们是相同的,就像$jQuery一样。它只是提供一个备用方案,并在环境已经使用require的情况下成为一个好公民。这仅是个极端情况,推荐使用require,但并非必需 - https://github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables- - Simon Smith

0

它们是相同的 打开已经加载所需的网站

然后打开Chrome控制台

在控制台中键入require并按Enter键

在控制台中键入requirejs并按Enter键

您会发现它们是具有不同名称的相同函数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接