无标题文章

node模块与包管理

在Node中,使用的是Commonjs模块标准,commonjs模块系统是文件之间共享对象或函数的唯一方式。注意,node中没有全局变量,全局命名空间的概念,你要用什么模块,直接require()过来,然后将这个模块对象复制给任意的一个局部变量。

关于node中的模块,需要理解它的模块的种类,加载的方式和系统加载模块的优先级情况。

模块种类

核心模块:核心模块定义在lib目录下,这些模块是被编译成二进制的,如console模块,URL,path模块等,另外,node总是先加载核心模块。只能通过模块名引用,而不能通过文件路径引用

文件模块:可通过绝对路径或者相对路径从文件系统中加载非核心模块

node_modules文件夹模块:node会在指定的文件夹下查找模块,并假定该文件夹是一个包,并查找包定义,包定义包含在package.json的文件中,如果没有package.json那么包的入口点会假定为index.js.

注意:如果require()方法中的模块名不是一个本地模块,也没有以'/','../',或者是'./'这样的相对路径开头,那么node会从当前模块的父目录开始,尝试在node_modules文件夹里加载相应模块,没找到的话会移动到上一级目录,直到顶层目录,如位于/home/king/westorm/projects/cp2/foo.js的文件调用了require('circle.js'),依次查找的位置为:

/home/king/westorm/projects/ch2/node_modules/foo.js

/home/king/westorm//projects/node_modules/foo.js

/home/king/westorm/node_modules/foo.js

/home/node_modules/foo.js

/node_modules/foo.js

缓存模块:模块首次加载时会被缓存起来

系统加载模块的优先级

如下图:

模块的循环调用问题

你可能感兴趣的:(无标题文章)