JavaScript模块加载器本质是解决浏览器端无法原生按需、异步、有依赖地加载代码的问题;require.js作为AMD代表填补了ES6前的空白,而ES6模块是语言级标准,已被现代浏览器和Node.js原生支持,静态分析、实时绑定、动态import等特性使其取代require.js成为主流。
JavaScript 模块加载器,本质是为了解决浏览器端“无法原生按需、异步、有依赖地加载代码”的问题。在 ES6 之前,浏览器没有 import 和 export,所有脚本默认全局执行,靠 标签顺序加载——既阻塞渲染,又难管理依赖。模块加载器就是填补
这个空白的运行时工具。
它用 define() 定义模块,用 require([deps], callback) 异步加载依赖并执行回调。比如:
require(['jquery', 'utils'], function($, utils) {
$('#btn').click(utils.handle);
});
这种写法让模块可声明依赖、延迟执行、不阻塞页面,解决了传统多 script 标签的两大痛点:加载卡顿和顺序错乱。
浏览器从 Chrome 61+、Firefox 60+ 开始原生支持 import/export,Node.js 也从 v13.2+(配合 .mjs 后缀或 "type": "module")支持。关键差异在于:
import() 返回 Promise,本身已是异步加载方案它曾是浏览器模块化的关键过渡方案,但如今已成历史角色:
type="module" script 支持直接在 HTML 中使用 import,零配置启动简单说:require.js 是给没有模块能力的浏览器“打补丁”,ES6 模块是浏览器自己长出了这块肌肉——补丁自然卸载。