返回
模块规范动态与静态之别:CommonJS vs ES6 Module
前端
2023-11-01 21:21:53
CommonJS模块规范
CommonJS模块规范是一种同步的模块加载机制,主要用于Node.js中。它使用require()
函数加载模块,并使用module.exports
对象导出模块。
// example.js
const fs = require('fs');
module.exports = {
readFileSync: fs.readFileSync,
writeFileSync: fs.writeFileSync
};
// main.js
const example = require('./example');
console.log(example.readFileSync('file.txt'));
在CommonJS规范中,模块是通过require()
函数动态加载的。当一个模块被加载时,它的代码会被执行,并且导出的对象会被赋值给require()
函数的返回值。
ES6 Module模块规范
ES6 Module模块规范是一种静态的模块加载机制,主要用于浏览器中。它使用import
语句加载模块,并使用export
语句导出模块。
// example.js
export function readFileSync(path) {
return fs.readFileSync(path);
}
export function writeFileSync(path, data) {
return fs.writeFileSync(path, data);
}
// main.js
import { readFileSync, writeFileSync } from './example';
console.log(readFileSync('file.txt'));
在ES6 Module规范中,模块是通过import
语句静态加载的。当一个模块被加载时,它的代码不会立即执行,而是等到该模块被实际使用时才会执行。
CommonJS和ES6 Module之间的区别
CommonJS和ES6 Module之间存在着一些关键区别,包括:
- 加载机制: CommonJS使用动态加载,而ES6 Module使用静态加载。
- 导出方式: CommonJS使用
module.exports
对象导出模块,而ES6 Module使用export
语句导出模块。 - 作用域: CommonJS模块的作用域是整个文件,而ES6 Module模块的作用域是模块内部。
CommonJS和ES6 Module的应用
CommonJS模块规范主要用于Node.js中,而ES6 Module模块规范主要用于浏览器中。
在Node.js中,CommonJS模块规范是默认的模块规范。可以使用require()
函数加载模块,并可以使用module.exports
对象导出模块。
在浏览器中,ES6 Module模块规范是默认的模块规范。可以使用import
语句加载模块,并可以使用export
语句导出模块。
总结
CommonJS和ES6 Module是JavaScript中两种流行的模块规范。两者之间存在着一些关键区别,包括动态加载与静态加载、导出副本与导出引用等。在Node.js中,CommonJS模块规范是默认的模块规范,而在浏览器中,ES6 Module模块规范是默认的模块规范。