Javascript 模块化规范

Javascript 模块化规范模块化的意思就是在解决某一问题时 采用分类的思想把问题进行系统性分解 从而解决问题的方式 目前 JavaScript 领域广泛使用的模块化规范包括 commonJs 规范 AMD 规范 CMD 规范 今天简单介绍下这三种开发规范 一 commonjs 规范 nbsp nbsp nbsp nbsp commonjs 出现的背景和 JavaScript 的函数式编程有关 没有标准化模块化系统 标准库少等 所以 commonjs 就是为了解决

模块化的意思就是在解决某一问题时,采用分类的思想把问题进行系统性分解,从而解决问题的方式。目前JavaScript领域广泛使用的模块化规范包括,commonJs规范、AMD规范,CMD规范。

今天简单介绍下这三种开发规范。

一、commonjs规范 

     commonjs出现的背景和JavaScript的函数式编程有关,没有标准化模块化系统、标准库少等。所以commonjs就是为了解决这些问题而出现的。即提供很多普通应用程序(主要指非浏览器的应用)使用的API,提供包管理工具,模块化实现规范(定义)等等。

nodejs 就是基于此规范实现的,简单归纳commonjs其特性:

    1、一个文件就是一个模块,拥有独立作用于。

    2、提供require引入模块,提供export 导出模块属性方法,exports代表模块本身。

 

二、AMD规范

    先解释下AMD名词的意思,全称是Asynchronous Module Definition,异步模块定义。AMD规范特性简单概括包括以下几点:

    1、所有的模块都进行异步加载,模块加载不影响后面语句运行。

    2、所有依赖某些模块的语句均放置在回调函数中。

    3、提供全局define 函数(方法)来定义模块,require引入模块,exports导出模块。

使用AMD规范进行页面开发需要用到对应的库函数RequireJS。实际上AMD 是 RequireJS 在推广过程中对模块定义的规范化的产出。

requirejs 在实现JavaScript模块化开发的同时,主要是解决2个问题:

    1、多个js模块相互引用问题,被依赖模块需早与依赖模块加载。

    2、js加载的会阻塞浏览器页面渲染,加载文件越多,页面失去响应时间越长 

AMD语法:定义了一个自由变量或者说是全局变量 define 的函数。

define( id?, dependencies?, factory )    

    1、id 为字符串类型,表示了模块标识,为可选参数。若不存在则模块标识应该默认定义为在加载器中被请求脚本的标识。如果存在,那么模块标识必须为顶层的或者一个绝对的标识。

    2、dependencies ,当前模块依赖的模块,已被模块定义的模块标识的数组字面量。

    3、factory,模块初始化要执行的函数或对象。如果为函数,它应该只被执行一次。如果是对象,此对象应该为模块的输出值 

require([dependencies], function(){})   

     require()函数接受两个参数

    1、第一个参数是一个数组,表示所依赖的模块

    2、第二个参数是一个回调函数,当前面指定的模块都加载成功后,回调函数将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块

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

 

三、CMD规范

CMD规范全称Common Module Definition通用模块定义,典型实现是seajs。seajs和requirejs 解决的问题一样,只是在只不过在模块定义方式和模块加载(可以说运行、解析)时机上有所不同。

语法:

define(function(require,exports,module){…}) ,factory是一个函数,提供equire, exports, module三个参数:

    1、require 是一个方法,接受模块标识作为唯一参数,用来获取其他模块提供的接口:require(id)

    2、exports 是一个对象,用来向外提供模块接口

    3、module 是一个对象,上面存储了与当前模块相关联的一些属性和方法

 

四、AMD和CMD区别

AMD和CMD最大的区别是对依赖模块的执行时机处理不同:

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

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

不同点体现如下:

1、异步加载模块

    requireJS,SeaJS加载模块都是异步的,只不过AMD依赖前置,JS可以方便知道依赖模块是谁,立即加载。CMD就近依赖,需要使用把模块变为字符串解析一遍才知道依赖了那些模块。

2、依赖模块执行时机不同

       AMD在加载模块完成后就会执行改模块,所有依赖模块都加载执行完后会进入require的回调函数执行主逻辑,依赖模块的执行顺序和书写顺序不一定一致,主逻辑一定在所有依赖加载完成后才执行

      CMD加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的

 

参考:CommonJS规范

           AMD (中文版)

           js模块化编程之彻底弄懂CommonJS和AMD/CMD!

        有错误之处,欢迎指正~~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207621.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午1:27
下一篇 2026年3月19日 下午1:28


相关推荐

  • Git创建分支和查看分支命令「建议收藏」

    Git创建分支和查看分支命令「建议收藏」branch:分支 是指在开发主线中分离出来的,做进一步开发而不影响到原来的主线Git存储的不是一系列的更改集,而是一系列快照,当你执行一次commit时,git存储一个commit对象,她包含它包含一个指针指向你当前需要提交的内容的快照。master分支是在gitinit命令运行时默认创建一个分支,并命名为master1.查看分支gitbranch:列出本地已经存在的分支,…

    2022年8月22日
    10
  • CSS绝对定位引发滚动条

    CSS绝对定位引发滚动条CSS 绝对定位超出父元素最大位置导致滚动条 CSS 绝对定位出现滚动条会导致整体布局出现问题 这个情况的出现一般是由于定位的 DIV 宽度超出了屏幕宽度 可以给绝对定位的上一层父 DIV 添加定位属性 再设置隐藏 如此就不会有滚动条 若是只是不需要横向或纵向滚动条则将 overflow 改成 overflow x 或 overflow y 代码如下 divname width 100 position relative overflow hidden 这里需要注意的是 position relative 不加这

    2026年3月18日
    1
  • jQuery弹出深色系层菜单

    低调奢华jQuery弹出层菜单,使用新版的jQuery库,兼容多种浏览器。Demo展示:http://hovertree.com/texiao/layer/3/本特效可以作为网站的引导页,使用jQ

    2021年12月24日
    55
  • Kivy A to Z — 怎样从python代码中直接訪问Android的Service「建议收藏」

    Kivy A to Z — 怎样从python代码中直接訪问Android的Service

    2022年2月3日
    43
  • redis info命令详解

    redis info命令详解

    2021年9月14日
    51
  • sql连接本地数据库

    sql连接本地数据库sql连接本地数据库安装好SQL2008后,界面只有已安装的包和正在运行的包左侧没有数据库,无法进行数据库操作.这是因为打开软件后,会提示连接一个东西,连接的时候按照默认的话就会连接错。如果出现提示连接成功后的界面只有两个文件夹“已安装的包”、“正在运行的包”,则是连接到了IntegrationServices,而非SQLServer数据库引擎。解决方法:在对象资源管理器中,选择…

    2022年5月18日
    111

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号