CommonJS(CJS)

随着 JavaScript 开发变得越来越广泛,命名空间和依赖关系变得越来越难以处理。人们已经开发出不同的解决方案以模块系统的形式来解决这个问题。

CommonJS(CJS)

CommonJS 是一种同步加载模块的规范,主要用于服务器端的 Node.js 环境。

// 模块导出module.exports= {// 模块内容};// 模块导入constmodule=require('module');

top:CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成。

AMD(Asynchronous Module Definition)

AMD 是一种_异步_加载模块的规范,主要用于浏览器端的 JavaScript 开发。它允许模块在加载完成后立即执行,而不会阻塞页面加载。

// 模块定义define(['dependency1','dependency2'],function(dependency1, dependency2) {// 模块内容return{// 模块导出内容};});// 模块加载require(['module'],function(module) {// 模块加载完成后执行的逻辑});

UMD(Universal Module Definition)

UMD 是一种通用的模块定义格式,旨在兼容 CommonJSAMD 以及全局变量导出的方式。

实现原理为:先判断是否支持node.js的模块,存在就使用node.js;再判断是否支持AMDdefine是否存在),存在则使用*

*AMD的方式加载。这就是所谓的UMD**。

(function(root, factory) {if(typeofdefine ==='function'&& define.amd) {// AMDdefine(['exports','module'], factory);  }elseif(typeofexports==='object'&&typeofmodule==='object') {// CommonJSfactory(exports,module);  }else{// 浏览器环境下暴露到全局变量factory((root.myModule= {}), root.myModule);  }})(this,function(exports,module) {// 模块内容});

UMD 实质上创建了一种使用两者之一的方法,同时还支持全局变量定义。因此,UMD 模块能够在客户端和服务器上工作。

ESM(ES Module)

ESM 是 ECMAScript 官方提供的模块标准,支持异步加载,具有静态导入和导出,使得代码更具可靠性和可预测性。

// 模块导出exportconstmodule= {// 模块内容};// 模块导入import{module}from'module';

概括

不同的模块规范各有优劣,选择合适的规范取决于项目的需求和目标平台。

CJS 为同步加载,主要用于服务器端编程,因为在服务器端加载速度不太重要,而且同步加载更容易理解和管理。

AMD 为异步加载,适用于浏览器环境中的异步模块加载,尤其是在 Web 应用中采用模块化开发时使用。

UMD 为通用形,通常用作 ESM 不起作用时的后备方案,适用于同时在浏览器和 Node.js 环境中使用的代码,使得代码具有更大的通用性。

ESM 适用于现代浏览器以及支持 ES6 模块的 Node.js 版本,使得代码更具可维护性和可移植性。

散热风扇https://www.uv-semi.com/

深圳网站建设www.sz886.com

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容