模块化: 将代码拆分成独立的块,然后再把这些块使用模块模式连接起来实现不同的功能。ps:就像小时候玩的拼图一样,不同的拼图组合在一起就可以拼成任意的形状。

模块化的思想: 把逻辑分块、各自封装,相互独立,同时自行决定引入执行那些外部模块以及暴露自身的那些模块。

原始的开发方式,随着项目复杂度提高,代码量越来越多,所需加载的文件也越来越多,这个时候就需要考虑如下几个问题:

  1. 命名问题:所有文件的方法都挂载到window/global上,会污染全局环境,并且需要考虑命名冲突问题
  2. 依赖问题:script是顺序加载的,如果各个文件文件有依赖,就得考虑js文件的加载顺序
  3. 网络问题:如果js文件过多,所需请求次数就会增多,增加加载时间

Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。

 

模块化的好处

  • 避免命名冲突(减少命名空间污染)
  • 更好的分离, 按需加载
  • 更高复用性
  • 高可维护性

 

CommonJS 主要应用在服务端,如果在浏览器端运行需要借助其他工具(Browserify)。

暴露模块 module.exports = value或者exports.xx = value(exports 是一个导出的对象)

引入模块 require(xx),如果是第三方模块,xxx 为模块名,如果为自定义模块,xxx 为模块的文件路径。

 

特点

  • 所有代码都运行在模块作用域,不会污染全局作用域。
  • 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
  • 模块加载的顺序,按照其在代码中出现的顺序。

 

CommonJS是一个更偏向于服务器端的规范。NodeJS采用了这个规范。CommonJS的一个模块就是一个脚本文件。require命令第一次加载该脚本时就会执行整个脚本,然后在内存中生成一个对象

{
  id: '...',
  exports: { ... },
  loaded: true,
  ...
}

id是模块名,exports是该模块导出的接口,loaded表示模块是否加载完毕。

以后需要用到这个模块时,就会到exports属性上取值。即使再次执行require命令,也不会再次执行该模块,而是到缓存中取值

 

 

使用:在 Node 中 安装 uniq 函数。

 

 

npm init
npm install uniq --save

// module.js
let arr = [1, 2, 2, 3, 3];
module.exports = {
  arr,
};

// app.js
let module1 = require("./module.js");
let uniq = require("uniq");

console.log(uniq(module1.arr)); // [1,2,3]

 

原文地址:http://www.cnblogs.com/ZhuAo/p/16858268.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性