我正在使用 requireJS 2.x。我发现有些教程(包括官方文档)有时使用
。requirejs.config({ [...] });
requirejs(["module"]) ...
有时候
require.config({ [...] });
require(["module"]) ...
这两个函数(require和requirejs)之间有什么区别吗?我在文档中找不到任何关于它们的信息。 :(
我正在使用 requireJS 2.x。我发现有些教程(包括官方文档)有时使用
。requirejs.config({ [...] });
requirejs(["module"]) ...
有时候
require.config({ [...] });
require(["module"]) ...
这两个函数(require和requirejs)之间有什么区别吗?我在文档中找不到任何关于它们的信息。 :(
它们完全相同。
原因是有些环境可能已经有了require
,在这种情况下,RequireJS不会覆盖它并允许通过requirejs
使用库。
请参见此提交- https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39
requirejs
和require
是一样的吗?从RequireJS 2.1.15开始,全局作用域中的require
和requirejs
确实是"完全相同的",可以通过在控制台执行以下测试来证明:
> 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
的引用。无论全局空间是否存在冲突,您都应该这样做。
好的,它们确实可能是“完全相同”的。那么让我们专注于为什么你会使用其中之一...
不清楚的是什么应该被认为是“最佳实践”:如果requirejs提供了额外的保证,“如果某些环境可能已经有了一个require”,那么总是使用requirejs函数来定义require配置是否是一个好主意?
此外,如果不可想象的事情发生了,并且所涉及的环境不仅已经定义了“require”,而且还定义了“requirejs”,那么这是否意味着我们也应该有一个requirejsjs呢?等等...?
$
和jQuery
一样。它只是提供一个备用方案,并在环境已经使用require
的情况下成为一个好公民。这仅是个极端情况,推荐使用require
,但并非必需 - https://github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables- - Simon Smith它们是相同的 打开已经加载所需的网站
然后打开Chrome控制台
在控制台中键入require并按Enter键
在控制台中键入requirejs并按Enter键
您会发现它们是具有不同名称的相同函数
requirejs
,因为require
已经是该情况下的本地变量。我发现这在React组件中很有用,可以在componentDidMount
中加载其他脚本。 - Simon Smith