一,为什么要用commonjs
在大型项目中,需要根据需求和功能将程序划分为不同的模块。第一有利于多人开发,提高开发效率;第二提高了模块的复用率,清晰明确的框架也能提高程序的可维护性和健壮性。
但是多人开发也会带来一些问题。
依赖问题:
不同的模块之间可能存在依赖问题,如果需要手动指定其加载次序,不仅浪费人力物力,也不利于修改。
全局污染问题:
加载次序不同的模块,如果重复定义了相同的变量,一定会引发无法预计的后果!
模块化开发是一种很好的思想,但是需要有一定的规范加以约束!
在服务器端,采用了commonjs,在浏览器端,有AMD和CMD之分。
今天先了解一下commonjs,一步步吃成胖子!
二,准备工作
安装nodejs和npm。
三,module对象
commonjs认为每个文件都是一个模块,每个模块都是一个作用域,通过require其他模块来解决模块的加载次序问题,通过exports来暴露接口,解决命名冲突问题。
每个模块内部都有一个module对象,指向当前模块,具有如下属性:
module.id 模块的识别符,通常是带有绝对路径的模块文件名
module.filename 模块的文件名,带有绝对路径
module.loaded boolean,标志模块是否已经加载
module.parent object,表示调用该模块的模块
module.children array,表示该模块需要用到的模块
module.exports 模块暴露的属性和方法
四,require
当我们键入 > var http = require(‘http’),commonjs就帮我们引入了http这个模块,看上去很简单,就是加载了一个模块,其实走了下面一段流程:
4.1查看缓存
可以多次require一个模块,但是除了第一次是真正的下载、执行一个js文件,然后返回其module.exports对象,并存储起来,之后的require<