从零开始学习node.js(四)[纽约的老郑原创,翻版必究]
这节课我们为深入学习一下模块的机制,正确掌握模块的姿势可以让我们以后开发的时候遇到问题不会慌。
我们说的模块大的范围上分二大类,一种是核心模块,这些不需要我们通过npm来加载,我们直接进行引用,如果是非核心模块,就得借助npm来引入了,node为我们提供了这些核心模块:
url:解析url
fs:文件系统相关
querystring:解析URL的查询字符串
util:这个封装了各种有用的小工具方法
path:处理文件的路径
http:这个最常用,提供http相关的很多东西
crypto:提供加密和解密的功能,基本上是对OPENSSL的包装
我们回顾一下第一天学习的怎么创建一个服务器的代码:
我们可以看到,我们从头到尾就只创建并编辑了这一个http.js文件,那我们用到了http这个核心模块,这个我们想要使用,直接用require,引进来就可以用了,但是我们的非核心模块怎么办呢?
这里又分二种类型,第一种是我们npm上面别人为我们编写好的,我们直接npm安装就可以了,可以参考一下上一节,另外一种就是自定义模块了,这个自定义模块采用的是近年来比较热门的CommonJS规范:
module对象:
每个模块内部,都有一个module对象,代表当前模块。它有以下属性。
module.id 模块的识别符,通常是带有绝对路径的模块文件名。
module.filename 模块的文件名,值为此模块的绝对路径。
module.loaded 返回一个布尔值,表示本模块是否已经完成加载。
module.parent 返回一个对象,表示调用该模块的模块。
module.children 返回一个数组,表示该模块要用到的其他模块,也就是require的其它模块。
有的同学要问了,我们怎么知道当前的文件是被别人引用还是真的是在执行当前的module?我们可以用下面的命令来判断:
我们使用gulp或者使用liveload的时候,会对gulp或liveload能实现自动编译感到好奇,其实这本质上利用的是node的一个叫watchFile的方法。我们现在来看一下原理: