RequireJS:“requirejs”和“require”函数之间的区别
Posted
技术标签:
【中文标题】RequireJS:“requirejs”和“require”函数之间的区别【英文标题】:RequireJS: Difference between "requirejs" and "require" functions 【发布时间】:2012-11-16 08:02:48 【问题描述】:我正在使用 requireJS 2.x。我发现有些教程(和官方文档)有时会使用
requirejs.config( [...] );
requirejs(["module"]) ...
有时
require.config( [...] );
require(["module"]) ...
这两个函数(require 和 requirejs)之间有什么区别吗?我在文档中找不到任何关于此的信息。 :(
【问题讨论】:
【参考方案1】:它们完全一样。
原因是某些环境可能已经有require
,在这种情况下RequireJS 不会覆盖它并允许通过requirejs
使用库
查看此提交 - https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39
【讨论】:
谢谢 :) 这应该在文档中注明。代码中的 cmets 并没有说明这一点。 我同意,这很令人困惑(甚至“官方” requirejs 页面的用法和示例之间也存在不一致)。很高兴知道他们是同一个人。 在浏览器中使用CommonJS(通过webpack或browserify)意味着你也可以访问requirejs
,因为require
在这种情况下已经是一个局部变量。我发现这在 React 组件中很有用,可以在 componentDidMount
中加载其他脚本。
好图书馆,令人困惑的文档。甚至“API”部分也不是 API,而更像是一本“食谱”。有很多教程比官方文档更容易上手。【参考方案2】:
requirejs
和 require
是一样的吗?
从 RequireJS 2.1.15 开始,全局空间中的 require
和 requirejs
确实“完全相同”,您可以在控制台中执行此测试即可证明:
> require === requirejs
true
测试返回true
告诉您它们是完全相同的函数对象。它们不是恰好具有相似或相同代码的两个函数。它们是同一个对象,句号。
注意,但是当您执行define(['require'], function (require)
时,传递给函数的require
通常与全局require
不同。
你应该使用require
还是requirejs
?
这取决于。 RequireJS 是一个 AMD 加载器,但它不是镇上唯一的加载器。如果您想编写 100% 符合 AMD spec 的代码,以便使用您的代码的人可以使用他们想要的任何加载器而无需修改您的代码,那么您应该在全局级别使用 require
,因为 @987654334 @ 特定于 RequireJS。另一个 AMD 加载程序不会定义它。 AMD 规范定义了require
,但没有定义requirejs
。
如果您正在加载定义全局 require
的其他内容,则必须在全局级别使用 requirejs
以避免冲突。
在模块内,始终使用define
来获取对require
的引用。无论全局空间中是否存在冲突,您都应该这样做。
【讨论】:
【参考方案3】:好的,它们可能确实“完全相同”。然后让我们关注为什么你会使用一个而不是另一个......
不清楚的是什么应该被认为是“最佳实践”:如果 requirejs 提供了额外的保证“如果某些环境可能已经有一个 require”,那么总是使用 requirejs 函数来定义一个不是一个好主意require 配置而不是 require 函数?
另外,如果发生了不可想象的事情并且所讨论的环境不仅已经定义了“require”而且还定义了“requirejs”,会发生什么?这是否意味着我们也应该有一个requirejsjs?等等……?
【讨论】:
技术上是一样的,就像$
和jQuery
一样。这只是为了在环境已经使用require
的情况下提供后备并成为一个好公民。这是一个非常极端的情况,建议使用require
,但不是必需的 - github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables-【参考方案4】:
他们是一样的 打开已经加载的网站
然后打开 Chrome 控制台
在控制台输入 require 并回车
在控制台输入 requirejs 并回车
你会发现它们是同一个函数,名字不同
【讨论】:
以上是关于RequireJS:“requirejs”和“require”函数之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
requirejs w/ knockoutjs w/ select2 无法在首次加载时更新 observable