模块化

心已入冬 提交于 2020-12-23 03:11:04

1,什么是模块化?

    模块化是指将一个复杂的系统分解为多个模块,方便编码。

2,为什么要用模块化?

    降低复杂性,降低代码耦合度,部署方便,提高效率。

3,模块化的好处?

    a,避免命名冲突,减少变量空间污染

    b,更好的分离代码,按需加载

    c,更高复用性

    d,更高可维护性

 

模块化实现  

1,函数形式

2,命名空间形式

3,立即执行函数

 4,模式增强

 

模块化规范

1,CommonJs

2,AMD

3,CMD

4,Es6

 

CommomJs

        据CommonJs规范规定每一个Js文件都可以看作一个模块,其内部定义的变量是属于这个模块的,不会对外暴露,也就是说不会污染全局变量。该规范最初用在服务器端的node环境中

        CommonJS采用同步加载不同模块文件,适用于服务器端的。因为模块文件都存放在服务器的各个硬盘上,读取加载时间快,适合服务器端,不适应浏览器。       

        浏览器不兼容CommonJs,原因是浏览器缺少module、exports、require、global四个环境变量。如要使用需要工具转换。
        CommonJS的核心思想就是通过 require 方法来同步加载所要依赖的其他模块,然后通过 exports 或者 module.exports 来导出需要暴露的接口。

 

案例:

    exports是导出,require引入,最后通过http://browserify.org/ browserify工具转换,把各个js转换成浏览器能识别的代码

    npm install -g browserify

    browserify app.js -o bundle.js

 

数组去重

    browserify uniq的排序方法

    npm init //初始化

    npm install uniq //安装uniq模块

    调用打印

    执行打包命令browserify app.js -o bundle.js

    数组去重成功

 

AMD规范

    CommonJs为服务器端而生,采用的同步加载方式。因此不适用浏览器。因为浏览器需要到服务器加载文件,请求时间远大于本机读取的时间,倘若文件较多,网络迟缓就会导致页面瘫痪,所以浏览器更希望能够时间异步加载的方式。

    AMD规范则是异步加载模块,允许指定回调函数。等模块异步加载完成后即可调用回调函数。 AMD得意的产出就是require.js

    AMD的核心思想就是通过define来定义一个模块,然后使用require来加载一个模块。

    AMD规范的使用依赖于require.js  https://requirejs.org/

    define(moduleId , ['module1' , 'mdule2'] , function(m1,m         2){...});

    

下载requirejs   https://requirejs.org/docs/docs/download.html

<script type="text/javascript" src="./require.js" data-main="./app.js"></script>

 

 

CMD规范

CMD异步加载,跟AMD的主要区别在于,AMD依赖前置,提前加载依赖。而CMD就近加载,按需加载

产物seaJs,跟requireJs使用有些相似。

CMD的核心思想就是通过define来定义一个模块,然后使用require来加载一个模块。

案例用法:

 

ES6

ES6自带模块化,可以使用 import 关键字引入模块,通过 export 关键字导出模块,功能较之于前几个方案更为强大,也是我们所推崇的,但是由于ES6目前无法在浏览器中执行,所以,我们只能通过babel将不被支持的import编译为当前受到广泛支持的 require。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

文案来源于duyi,未经允许禁止转载复制!仅供学习

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!