1、Es Module 和 CommonJs
- ES Modules(ESM)和 CommonJS 是 JavaScript 中两种主要的模块化系统。它们在使用方式、加载机制和语法上存在一些显著的差异
2、语法与使用方式
export const name = 'Alice';
export function greet() {
console.log('Hello');
}
const age = 30;
export default age;
import { name, greet } from './module.js';
import age from './module.js';
import * as module from './module.js';
const name = 'Alice';
function greet() {
console.log('Hello');
}
module.exports = {
name,
greet
};
module.exports = age;
const { name, greet } = require('./module.js');
const age = require('./module.js');
3、加载机制
import('./module.js').then(module => {
console.log(module);
});
- 同步加载:在 Node.js 中,`require` 是同步的,这在处理文件系统时可能会导致阻塞。
4、模块作用域与缓存
console.log(this);
console.log(this);
5、运行时环境支持
<script type="module" src="main.js"></script>
{
"type": "module"
}
6、结论
- 语法简洁性:ES Modules 的静态导入和简洁的语法使得模块化更加直观。
- 加载机制:ES Modules 的静态加载提供了更好的优化机会,而 CommonJS 的动态加载具有更大的灵活性。
- 环境:对浏览器原生支持和现代化开发工具链的适应性,让 ES Modules 更适合现代 Web 开发;CommonJS 则由于其在 Node.js 环境中的广泛应用而依然占据重要地位。
7、vue中的使用
- ES Modules:Vue.js 鼓励使用 ES Modules,尤其是在浏览器环境和现代工具链中。ES Modules 语法简洁、优化性能好,适用于大多数前端开发场景。
- CommonJS:Vue.js 也兼容 CommonJS,特别是在 Node.js 环境中工作时。一些工具和插件可能会使用 CommonJS 语法,但是大多数前端代码是使用 ES Modules 编写的。