前端工程化(二)前端模块化编程:从CommonJS到ES Module大家好,我是Ysh,谨以此系列文章献给正在找工作的
大家好,我是Ysh,谨以此系列文章献给正在找工作的开发兄弟们,愿大家年年高升无寒冬。
创作不易,还请兄弟们多多点赞、收藏、关注 三联走起~
CommonJS的基本使用方法与优缺点
CommonJS 是一种在服务器端广泛使用的模块化标准,Node.js使用这种标准来组织和加载模块。CommonJS通过 require
函数引入模块,通过 module.exports
导出模块。
基本使用方法
-
定义和导出模块
// math.js function add(a, b) { return a + b; } function subtract(a, b) { return a - b; } module.exports = { add, subtract };
-
引入和使用模块
// app.js const math = require('./math'); console.log('Addition:', math.add(5, 3)); // Addition: 8 console.log('Subtraction:', math.subtract(5, 3)); // Subtraction: 2
优缺点
-
优点:
- 同步加载:模块加载是同步的,易于理解和调试。
- 简单易用:语法简单直观,适合服务器端环境。
- 支持广泛:Node.js默认支持CommonJS规范。
-
缺点:
- 不适合浏览器:同步加载在浏览器环境下会导致阻塞。
- 缺乏静态分析:由于模块是动态加载的,编译器无法进行静态分析和优化。
AMD和CMD:两者的区别和应用场景
AMD(Asynchronous Module Definition) 和 CMD(Common Module Definition) 是两种在浏览器环境中使用的模块化规范。
AMD
AMD规范主要用于浏览器环境,通过异步加载模块来提高页面加载速度,RequireJS
是实现AMD规范的一个流行库。
-
定义和导出模块
// math.js define(function() { return { add: function(a, b) { return a + b; }, subtract: function(a, b) { return a - b; } }; });
-
引入和使用模块
// app.js require(['./math'], function(math) { console.log('Addition:', math.add(5, 3)); // Addition: 8 console.log('Subtraction:', math.subtract(5, 3)); // Subtraction: 2 });
CMD
CMD规范由SeaJS
提出,适合浏览器端使用
,特点是按需加载模块,CMD规范在语法上与AMD有所不同,更强调依赖就近。
-
定义和导出模块
// math.js define(function(require, exports, module) { exports.add = function(a, b) { return a + b; }; exports.subtract = function(a, b) { return a - b; }; });
-
引入和使用模块
// app.js define(function(require) { var math = require('./math'); console.log('Addition:', math.add(5, 3)); // Addition: 8 console.log('Subtraction:', math.subtract(5, 3)); // Subtraction: 2 });
AMD与CMD的区别
- 加载时机:AMD模块在定义时加载,CMD模块在使用时加载。
- 适用场景:AMD适用于浏览器端的异步加载,CMD适用于按需加载的场景。
ES Module:ES6模块的使用方法及其与CommonJS的区别
ES Module是ECMAScript 2015(ES6)引入的官方模块系统,旨在统一JavaScript的模块化规范,适用于浏览器和服务器端环境。
基本使用方法
-
定义和导出模块
// math.js export function add(a, b) { return a + b; } export function subtract(a, b) { return a - b; }
-
引入和使用模块
// app.js import { add, subtract } from './math.js'; console.log('Addition:', add(5, 3)); // Addition: 8 console.log('Subtraction:', subtract(5, 3)); // Subtraction: 2
优缺点
-
优点:
- 静态分析:编译器可以在编译时进行静态分析和优化。
- 异步加载:模块加载是异步的,不会阻塞页面加载。
- 跨平台:适用于浏览器和服务器端环境。
-
缺点:
- 浏览器兼容性:老旧浏览器不支持,需要使用构建工具(如Webpack或Babel)进行编译。
- 相对路径:模块路径必须是相对路径或绝对路径,不能省略文件扩展名。
与CommonJS的区别
- 加载方式:CommonJS是同步加载,ES Module是异步加载。
- 导出方式:CommonJS使用
module.exports
导出,ES Module使用export
导出。 - 引入方式:CommonJS使用
require
引入,ES Module使用import
引入。
转载自:https://juejin.cn/post/7386969940941520930