首页 > 其他分享 >CommonJS、AMD、CMD、UMD、ES6

CommonJS、AMD、CMD、UMD、ES6

时间:2024-08-12 14:28:45浏览次数:14  
标签:function CommonJS require CMD js UMD 模块 hello 加载

一、commonJs

1、CommonJS的发扬光大和nodejs相关,CommonJS用同步的方式加载模块。在服务器端,读取快。限于网络原因,不适合在浏览器端使用;

2、输出module.exports,加载require;

// model1.js
var age = 11

function say(){
    console.log(age);
}
module.exports = {
    say
}

// index.html
var wu = require('./model1.js');

console.log(wu.say)

  3、CommonJS 规范是运行时动态加载、拷贝值对象使用。每一个引用出去的模块对象,都是一个独立的对象。

 

二、AMD(Asynchronous Module Definition)即异步模块定义的意思。

  1、AMD是requireJS在推广过程中的规范产出,由于不是JavaScript原生支持,需要引入库函数requireJS;

  2、引入依赖

<script src="js/require.js" data-main="./main"></script>

  3、定义模块:由 define 方法来定义,在 define API 中;

  4、模块引入:require()函数接受两个参数,第一个参数是一个数组,表示所依赖的模块第二个参数是一个回调函数,当前面指定的模块都加载成功后。

   

// hello.js
define('hello', function (x, y){
  var add = function (x,y){
    console.log(x, y) // 1, 2
   return x+y;
 };
  return {
   add: add
 };
});
// main.js

require.config({
    'baseUrl': './js',
    'paths': {
        'hello': './hello'
    }
})

define('main', function() {
    require(['hello'], function(hello) {
        console.log(hello.add(1, 2)) // 3
    })
})

  

require()函数在加载依赖的函数的时候是异步加载的,这样浏览器不会失去响应,它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。

三、CMD(Common Module Definition)

  1、是 Sea.js 所推广的一个模块化方案的输出。也支持包含 id, deps 以及 factory 三个参数的形式,但推荐的是接受 factory 一个入参,然后在入参执行时,填入三个参数 require、exports 和 module。

  2、定义模块

  

//require是可以把其他模块导入进来的一个参数;
//而exports是可以把模块内的一些属性和方法导出的;
//module 是一个对象,上面存储了与当前模块相关联的一些属性和方法。

define(function(require, exports, module) { // 每个函数单独导出 exports.add = function(x, y) { return x + y; } });

  3、引用模块

define(function(require, exports, module) {
    var hello = require('hello');
    console.log(hello.add(2,3));

    // 单独导出
    exports.init = function init() {
      console.log('init');
    }
});

  4、htnl调用

<script src="./js/sea.js"></script>
<script>
seajs.config({
  base: './js', // 后续引用基于此路径
  alias: {  // 别名,可以用一个名称 替代路径(基于base路径)
    hello: './js/hello.js'
  },
});

// 加载入口模块
seajs.use("./main.js", function(main) {
  main.init(); // init
});
</script>

  四、UMD( Universal Module Definition)即通用模块规范。

    1、现在主流框架的源码都是用的UMD规范,它既可以兼容浏览器端又可以兼容node。

    2、UMD的实现

      先判断是否支持 AMD(define 是否存在),存在则使用 AMD 方式加载模块;

      再判断是否支持 Node.js 模块格式(exports 是否存在),存在则使用 Node.js 模块格式;

      前两个都不存在,则将模块公开到全局(window 或 global);

   五、es6模块规范,ES2015 Modules(import、export)

    1、ES6 模块规范是解析(是解析不是编译)时静态加载、运行时动态引用,所有引用出去的模块对象均指向同一个模块对象。

综上所述:

  1、CommonJS 规范主要是为服务器端的 NodeJS 服务,服务器端加载模块文件无延时,浏览器端差点儿意思了;

  2、AMD和CMD的适合浏览器端,他俩的区别:

   a、AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块;

   b、CMD推崇就近依赖,只有在用到某个模块的时候再去require。

   3、webpack 自己实现了一套模块机制,无论是 CommonJS 模块的 require 语法还是 ES6 模块的 import 语法,都能够被解析并转换成指定环境的可运行代码。

标签:function,CommonJS,require,CMD,js,UMD,模块,hello,加载
From: https://www.cnblogs.com/vicky-li/p/18354681

相关文章

  • 通过cmd查找端口占用,并杀死进程
    windows通过cmd查找端口占用1.查看端口占用情况netstat-ano 2.查看某个端口被占用情况netstat-ano|findstrxxxx//xxxx为查询的端口号 3.查看某个状态的端口netstat-ano|findstrxxxx//xxxx为查询的端口状态 具体端口状态请查找后面描述......
  • bat cmd javaw -jar
    rem使用者应根据自身平台编码自行转换防止乱码例如win使用gbk编码@echooffchcp65001remjar平级目录setAppName=medicare-down.jarsetpathx=%CD%setpathxx=%pathx%\Java\jdk1.8.0_101\::echo%pathxx%set"JAVA_HOME=%pathxx%::set"CLASSPATH=%JAVA_HOME%\lib\dt.jar;......
  • 解决Windows系统下cmd中ping命令无法使用的问题
    问题描述:当我配置Java环境变量后,发现ping命令无法使用。 问题分析:可能是环境变量配置上出了问题,还可能是PING.EXE被删除了。解决步骤:①“Win+R”打开运行窗口,输入:C:\Windows\System32 ②点击“确定”后,看是否能够找到PING.EXE(文件名顺序一般按字母顺序)。如果没......
  • 从vimdiff get命令为什么不是dg看vim cmd解析
    intro当使用vimdiff来获取另外一个文件的diff内容时,在Ex模式下使用的是diffget,但是在normal模式下对应的cmd却不是对应的dg而是另一个do(diffobtain),这个都少有些意外。单单的对于"为什么vim使用do而不是dg命令来获得diff?"这个问题,其实在vim的“do”帮助文档中已经明确说明:[......
  • 支持S3协议的S3cmd工具简单使用
    本文分享自天翼云开发者社区《支持S3协议的S3cmd工具简单使用》,作者:付****健一:安装方法#wgethttp://nchc.dl.sourceforge.net/project/s3tools/s3cmd/1.0.0/s3cmd-1.0.0.tar.gz#tar-zxfs3cmd-1.0.0.tar.gz-C/usr/local/#mv/usr/local/s3cmd-1.0.0//usr/local......
  • Neo4j 实现一个简单的CMDB管理平台
    简介Neo4j是一个高性能的图形数据库管理系统,它使用图形模型来存储和查询数据。图形数据库与传统的关系型数据库不同,它们使用节点和边来表示数据实体和它们之间的关系,而不是使用表格和行,可以使用neo4j实现权限系统,知识图谱,cmdb等部署dockerrun-d--name=neo4j\--publis......
  • vscode基于脚手架创建项目(cmd,自用)+ 简单的项目导入方式
    ————————————创建项目*确保下载了node.js以管理员身份运行cmd,切换到vscode存放项目的地方,运行npminstall-g--force@vue/cli准备工作完成在项目存放处打开cmd,运行vuecreatecomponent_dome(component_dome为项目名)选中Manuallyselectfeatures,回车......
  • cmd最全命令.收藏必备
    平台windowsWindows命令提示符(cmd.exe)是WindowsNT下的一个用于运行Windows控制面板程序或某些DOS程序的shell程序;或在WindowsCE下只用于运行控制面板程序的外壳程序。   历史在Windows2000以前的Windows系统中没有此文档;command.com即是此文......
  • mfc用printf输出调试信息到终端cmd
    前言全局说明mfc用printf输出调试信息到终端cmd一、说明环境:Windows11家庭版23H222631.3737VS2013二、printf打印调试信息2.1设置启用控制台打印2.1.1打开解决方案(项目)--属性2.1.2配置属性->生成事件->后期生成事件->命令行->编辑在框里填入......