对于node学习断断续续了好久,没有完整系统的学下来,上周涛哥说起在我们前端组也学习一下node来做后端
;趁着最近不忙又重新学习了一下,现在重新梳理一些基础的知识;
- Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
- 事件驱动:当触发某个事件的时候,执行事件中指定的代码!
- 非阻塞式 I/O 的模型:采用非阻塞的操作,能够提高CPU处理的效率!代码表现形式
是:会经常写回调函数。
node对文件的操作,使用fs模块来操作文件
fs.readFile
fs.writeFile
fs.appendFile
node 中如何实现模块化
在Node中基于CommonJS规范,通过三个东西实现模块化:
- module:表示一个模块,在Node中,最常见的模块,就是一个个的JS文件!
- require:作用是加载其他模块用的;在一个JS文件中,如何引用其他JS文件中的成员呢?就是用require
- exports:在Node的模块中,如果这个模块需要向外暴露一些成员,供其他JS模块使用,那么,需要使用exports向外暴露这些成员!
注意:Node 中的模块化,主要解决的JS文件之间的相互依赖关系!
模块加载规则
- 优先从缓存中加载
- 使用
delete require.cache[__filename]
来防止模块被缓存,但是一般不建议这么用,因为模块的缓存能够提高运行效率;
- 使用
- 加载核心模块:优先从缓存中加载;如果缓存中没有的话,再去执行加载核心模块!
自己的模块:优先从缓存中加载;如果缓存中没有的话,再去执行加载用户模块!
注意:我之前遇到一个问题,从npm下载包,下载完包后项目一直跑不起来,下载也没报错,后来问肖遥,肖遥帮忙解决了这个问题,
用npm cache clean –force强制清一下缓存;这就是因为它这个加载是优先从缓存里加载,如果本地缓存中没有的话
再去执行加载核心模块,但是一般不建议这么用,因为模块的缓存能够提高运行效率!第三方模块查找规则:
- node首先,查看项目根目录中有没有
node_modules
文件夹 - 查找
node_modules
文件夹中,有没有和第三方模块名称一致的文件夹 - 在模块对应的文件夹中,查找有没有
package.json
这个文件 - 在
package.json
文件中,查找有没有main
属性 - 如果有
main
属性,并且main
属性指向的路径存在,那么就尝试加载这个路径指定的文件! - 如果
package.json
文件中,没有main
属性,或者main
属性指向的路径不存在,或者没有package.json
文件, 那么,Node尝试加载 模块根目录中index
相关文件:index.js
->index.json
->index.node
- 如果在
node_modules
文件夹中,找不到对应的模块文件夹,或者在项目根目录中根本没有node_modules
文件夹,则向上一层文件夹中去查找,查找规则同上! - 如果上一层目录中也没有查找到,则再向上翻一层去查找,直到找到当前项目所在的盘符根目录为止!
如果找到了盘符根目录还找不到,则报错:
cannot find module ***
2018-08-25 —黄镇
- node首先,查看项目根目录中有没有