CommonJS适用于Node.js环境,同步加载,支持动态导入;2. ES6模块为现代标准,静态解析,支持tree-shaking,更适合前端项目;3. 新项目推荐使用ES6模块,兼顾前后端兼容与构建优化。

在JavaScript开发中,模块化是组织代码、提升可维护性和复用性的关键手段。随着语言的发展,CommonJS和ES6模块(ESM)成为两种主流的模块规范。它们各有特点,适用于不同环境和场景。
CommonJS:Node.js中的模块标准
CommonJS是一套早期为服务器端JavaScript设计的模块规范,被广泛应用于Node.js环境中。
特点:
系统功能介绍 1 包含企业网站所必备的功能:企业信息、产品管理、人才招聘、新闻资讯、企业图片、以及视频下载等模块2 由于是从CMS系统的基础上开发而成,因此相对于一些其他的企业网站管理系统,本系统具备更强的可扩展能力,可以胜任从小型工作室到大中型企业网上门户等各种不同规模网站的需求。3 后台管理与模板完全分离,并具备非常灵活的标签技术,可以实现无限制个性化的界面定制4 操作简单,利用已经制作好的模
- 同步加载:模块通过require()同步引入,适合本地文件系统读取。
- 动态导入:可以在条件语句或函数内部调用require(),实现按需加载。
- 导出方式灵活:使用module.exports或exports导出对象、函数或值。
示例:
立即学习“Java免费学习笔记(深入)”;
// math.js
function add(a, b) {
return a + b;
}
module.exports = { add };
// app.js
const { add } = require('./math');
console.log(add(2, 3));
ES6模块:现代浏览器原生支持
ES6(ECMAScript 2015)引入了官方的模块系统,旨在统一前端和后端的模块标准,现已被现代浏览器和Node.js广泛支持。
特点:
- 静态结构:import和export必须位于模块顶层,便于静态分析和优化。
- 异步加载设计:更适合网络环境,支持tree-shaking等构建优化。
- 命名导出与默认导出:支持多种导出方式,语法更清晰。
示例:
立即学习“Java免费学习笔记(深入)”;
// math.mjs
export const add = (a, b) => a + b;
export default function multiply(a, b) {
return a * b;
}
// app.mjs
import multiply, { add } from './math.mjs';
console.log(add(2, 3));
console.log(multiply(2, 3));
核心差异对比
- 加载机制:CommonJS同步加载,ES6模块编译时绑定,运行前解析。
- 执行时机:CommonJS在运行时确定依赖,ES6模块在代码解析阶段就确定依赖关系。
- 循环依赖处理:CommonJS返回缓存值,可能不完整;ES6模块保持引用,能更准确处理。
- 文件扩展名:Node.js中CommonJS通常用.js,ES6模块推荐.mjs或在package.json中标记"type": "module"。
如何选择?
如果项目运行在Node.js且无需浏览器兼容,CommonJS依然稳定可靠。但在新项目中,尤其是涉及前端构建工具(如Webpack、Vite)时,优先使用ES6模块。
现代Node.js版本已全面支持ES模块,结合.mjs或配置可无缝切换。同时,工具链对ESM的支持更好,利于代码分割、懒加载和打包优化。
基本上就这些。根据运行环境和团队技术栈选择合适的模块规范,才是最实际的做法。









