NodeJS学习(二)-包和NPM概念

NODE_PATH环境变量

NodeJS允许通过NODE_PATH环境变量来指定额外的模块搜索路径。NODE_PATH环境变量中包含一到多个目录路径。

1
NODE_PATH = /project/user/lib;/project/lib

包(package)

一个JS模块相当于一个子模块,多个子模块组成的复杂模块在这里称为包。
包有一个入口模块,入口模块导出的对象被称为包的导出对象。例如下方,cat称为一个包。

1
2
3
4
5
- /project/lib/
- cat/
head.js
body.js
main.js

但是上面目录引入主入口时候是require('./project/lib/cat/main'),这样在引入过于繁琐,于是有了下面方法。

通过package.json自定义入口模块和存放位置,于是目录下增加package.json文件,NodeJS会根据package.json找到对应的入口文件
包工程目录:

1
2
3
4
5
6
7
- /project/
- cat/
- lib/
head.js
body.js
main.js
package.json

package.json内容:

1
2
3
4
{
"name":"cat",
"main":"./lib/main.js"
}

修改后,便可通过require('./project/lib/cat')的方式加载模块

让node执行我们想要的命令行程序

让自己项目拥有一个良好的目录

1
2
3
4
5
6
7
8
9
10
11
- /home/user/workspace/node-echo/ # 工程目录
- bin/ # 存放命令行相关代码
node-echo
+ doc/ # 存放文档
- lib/ # 存放API相关代码
echo.js
- node_modules/ # 存放三方包
+ argv/
+ tests/ # 存放测试用例
package.json # 元数据文件
README.md # 说明文件

NPM

上面有个包的概念,就会有一个管理包的东西。NPM就是随同NodeJS一起安装的包管理工具。NPM相当于一个服务器,挂载着各种各样的包。

NPM作用(一)- 下载包

NPM对package.json做了扩展,允许在其中声明第三方依赖包,当你工程的包越来越多的时候,声明好了dependencies,直接npm i就可以批量安装三方包了。

1
2
3
4
5
6
7
{
"name":"cat",
"main":"./lib/main.js",
"dependencies":{
"debug": "^2.6.1"
}
}

NPM作用(二)- 安装命令行程序

如若包提供了命令行的使用方式,只要执行npm install XXX -g
-g表示全局安装

NPM作用(三)- 发布包

第一次发布NPM代码需要注册账号,npm addusernpm publish