RequireJS 和 require('xxx') 有什么关系吗?
RequireJS 和 require('xxx') 有什么关系吗?
我们知道在node.js中是可以直接使用require()来引入模块的。说明node.js中的话,require是内置的。如果RequireJS提供了require()方法,那么一般我们还经常看到RequireJS,这个有什么额外的用处吗?
回复
1个回答

test
2024-07-11
简短解释:RequireJS
是十多年前JS还缺少模块系统时的产物,方便在浏览器项目里管理JS的依赖和加载。随着ES Modules
规范的推出,流行前端打包工作流(比如webpack
、rollup
、esbuild
)之后,RequireJS
已经不再流行,很少在新项目里使用了。
RequireJS
是异步模块加载器的一个实现,主要是给浏览器环境里用的。因为浏览器通过网络
加载js文件,不像node.js通过硬盘
加载那样快速稳定,所以需要使用异步方式来加载。这就出现了不同于node.js的CommonJS
的模块规范,也就是异步模块(Asynchronous Module Definition
,简称AMD
)。
CommonJS
的模块是这样的:
var $ = require('jquery');
exports.myExample = function () {};
AMD
的模块是这样的:
define(['jquery'] , function ($) {
return function () {};
});
有时候我们想让一个模块能同时在两个环境里使用,于是就有了UMD
规范:
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "jquery"], factory);
}
})(function (require, exports) {
exports.myExample = function () {};
});
看到上面这么多代码,不要被吓到了,因为我们现在有前端打包工作流,可以自动生成以上代码,不需要自己手写。
我们现在应该使用ES Modules
。
ES Modules
是JS的模块规范,浏览器已经原生支持,还能借助工具转译成其他规范,能适应更多场景。
import $ from 'jquery';
export const myExample = () => {};
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容