首页 > 其他分享 >【js】CommonJS、AMD、CMD三种规范

【js】CommonJS、AMD、CMD三种规范

时间:2023-03-09 16:45:14浏览次数:55  
标签:CommonJS 规范 require CMD AMD module js 模块 加载

前言

这三个规范都是为Js模块化加载而生的,使模块能够按需加载,使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发得到了更好的合作

一、CommonJS

是一种为JS的表现指定的规范,它希望js可以运行在任何地方,更多的说的是服务端模块规范,Node.js采用了这个规范。

核心思想

一个单独文件就是一个模块,通过require方法来同步加载要依赖的模块,然后通过extports或则module.exports来导出需要暴露的接口。

require("module");
require("../file.js");
exports.doStuff = function() {};
module.exports = someValue;

优点:服务器端模块重用,NPM中模块包多,有将近20万个。

缺点:加载模块是同步的,只有加载完成后才能执行后面的操作,也就是当要用到该模块了,现加载现用,不仅加载速度慢,而且还会导致性能、可用性、调试和跨域访问等问题。Node.js主要用于服务器编程,加载的模块文件一般都存在本地硬盘,加载起来比较快,不用考虑异步加载的方式,因此,CommonJS规范比较适用。然而,这并不适合在浏览器环境,同步意味着阻塞加载,浏览器资源是异步加载的,因此有了AMD CMD解决方案。

实现:服务器端的 Node.js;Browserify,浏览器端的 CommonJS 实现,可以使用 NPM 的模块,但是编译打包后的 文件体积可能很大;modules-webmake,类似Browserify,还不如 Browserify 灵活;wreq,Browserify 的前身;

 

二、AMD

鉴于浏览器的特殊情况,又出现了一个规范,这个规范呢可以实现异步加载依赖模块,并且会提前加载那就是AMD规范。

其核心接口是:define(id?, dependencies?, factory) ,它要在声明模块的时候指定所有的依赖 dependencies ,并且还要当做形参传到factory 中,对于依赖的模块提前执行,依赖前置。

define("module", ["dep1", "dep2"], function(d1, d2) {
  return someExportedValue;
});
require(["module", "../file"], function(module, file) { /* ...*/ });

 

优点:在浏览器环境中异步加载模块;并行加载多个模块;

缺点:开发成本高,代码的阅读和书写比较困难,模块定义方式的语义不顺畅;不符合通用的模块化思维方式,是一种妥协的实现;

实现:RequireJS; curl;

三、CMD

Common Module Definition 规范和 AMD 很相似,尽量保持简单,并与 CommonJS 和 Node.js 的 Modules 规范保持了很大的兼容性。

define(function(require, exports, module) {
  var $ = require('jquery');
  var Spinning = require('./spinning');
  exports.doSomething = ...
  module.exports = ...
})

 

优点:依赖就近,延迟执行 可以很容易在 Node.js 中运行; 缺点:依赖 SPM 打包,模块的加载逻辑偏重; 实现:Sea.js ;coolie

标签:CommonJS,规范,require,CMD,AMD,module,js,模块,加载
From: https://www.cnblogs.com/websmile/p/17199047.html

相关文章

  • 解决Java调用BAT批处理不弹出cmd窗口
    常规调用方式:(这个肯定会弹出cmd窗口)Runtime.getRuntime().exec("cmd.exe/CstartD:\\test.bat");解决不弹框只需要“start”后面加一个参数“/b”就行:Runtime.......
  • Node.js安装成功了,但cmd找不到node是怎么回事?
    这样的情况一般是由于没有安装在C盘的默认路径下导致的。比如选择下载到了D盘后者其他盘,在cmd中输入node-v显示 ‘node’不是内部或外部命令,也不是可运行的程序或......
  • 使用CMD命令导出和导入IIS站点配置信息
    有时候,我们可能有这个需求:某台服务器上的IIS配置了几十个网站项目,有没有一种方式可以导出这些配置,然后重装系统后(假设有这个业务场景)导入这些配置,避免一个一个的网站项目......
  • Getting Started with AMD
    FPGAanddefinitionsBEL-BasicElementofLogic​ BEListhelowestbasicelement(thesmallestandindivisiblecomponentinFPGA),anditcanalsobecal......
  • cmd常用命令
    一、文件和文件夹操作命令dir:显示目标内容、路径md:创建目录mdC:\dms:创建dms文件夹mdC:\dms\a\b\c\drd:删除目录格式:命令  参数  路径rd /S  /Q  C:\dm......
  • 删除win11右键一级菜单的AMD驱动栏
    1、按Win+R快捷键,输入"regedit”打开注册表。2、地址栏输入HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellExtensions回车。3、点击选择Sh......
  • cmd中执行cl命令,提示'cl' 不是内部或外部命令,也不是可运行的程序或批处理文件
    前提:已经安装vs系列软件我们可以在命令行直接编译c++程序在windows操作系统中,打开命令行,输入cl,若系统提示'cl'不是内部或外部命令,也不是可运行的程序或批处理文件。则......
  • jcmd的简单总结
    jcmd的简单总结背景自从2019年公司转向java技术路线.一直断断续续的在学习java相关的技术内容.但是总感觉学的不是很深入.这周比较累.也不想在学新东西了.所以想着......
  • ATSAMD21配置SPI_PIN
    学习SPIMASTERDEMO发现有一个参数config_spi_master.mux_setting=CONF_MASTER_MUX_SETTING;之前遇到跟串口的一样,就是配置pin脚的功能的,SPI应该是指定不同功能的pin......
  • mysql select into outfile默认文件保存路径是C:\ProgramData\MySQL\MySQL Server
    找到my.ini,修改usecure_file_priv=''然后保存并且退出。重启mysql正确的解决方法是:搜索“服务”并进入:下拉找到Mysql左上角处可以进行重启动。如果以后想要通......