npm使用小结

node.js的出现,使的前端发生了翻天覆地的变化,JavaScript语言更是连续获得github编程语言榜首。如今使用JavaScript一门语言就可以实现从前端到后台的全栈开发,然而node.js的发展离不开其优秀的包(依赖)管理工具npm。NPM(node package manager),通常称为node包管理器。顾名思义,它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。

npm官网: https://npmjs.org
npm官方文档: https://docs.npmjs.com

npm的安装

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:

1
2
3
4
$ node -v
v6.0.0
$ npm -v
3.8.6

如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:

1
$ npm install npm -g

使用 npm 命令安装模块

node包的安装分两种:本地安装、全局安装。两者的区别如下:
本地安装:package会被下载到当前所在目录,也只能在当前目录下使用。
全局安装:package会被下载到到特定的系统目录下,安装的package能够在所有目录下使用。

1. 本地安装

运行如下命令,就会在当前目录下安装 express-generator(基于Node.js平台的web应用开发框架,express-generator是一个快速生成express示例应用的生成器)

1
npm install express-generator

安装结束后,当前目录下回多出一个 node_modules 目录,express-generator就安装在里面。同时它的依赖模块也会安装自动安装,控制台也会打印出相关的依赖版本号。

2. 全局安装

刚才安装了express模块,但是控制台输入:

1
2
$ express
bash: express: command not found

会提示没有该命令。因为上面只进行了本地安装,我们只能进入安装目录node_modules/express-generator/bin,然后执行$ ./express,才可以使用该命令,不但不方便,而且不可以在任意目录生成应用。

对于这种应用(express-generator,hexo-cli,grunt-cli等)应该采用全局安装,而且十分简单,只需加上参数 -g 就可以了。

1
2
3
4
5
6
7
8
9
10
$ npm install express-generator -g
C:\Users\huang\AppData\Roaming\npm\express -> C:\Users\huang\AppData\Roaming\npm\node_modules\express-g
enerator\bin\express
C:\Users\huang\AppData\Roaming\npm
`-- express-generator@4.13.4
+-- commander@2.7.1
| `-- graceful-readlink@1.0.1
+-- mkdirp@0.5.1
| `-- minimist@0.0.8
`-- sorted-object@2.0.0

可以看到,在windows下全局安装被安装到了用户目录C:\Users\huang\AppData\Roaming\npm\中,linux中同样也会被安装到相应的全局目录中。
此时在所有目录下都可以使用 express 命令生成示例应用了。

使用package.json

我们现在在任意空目录下执行$ express,将会生成一个express示例应用,我们发现生成的文件中有一个叫package.json的json文件。每一个node.js应用或者一个模块都应该有一个这样得文件。该文件是一个node.js模块(包)的描述文件。package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象。

express自动生成的package.json文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name": "test",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "~1.15.1",
"cookie-parser": "~1.4.3",
"debug": "~2.2.0",
"express": "~4.13.4",
"jade": "~1.11.0",
"morgan": "~1.7.0",
"serve-favicon": "~2.3.0"
}
}

Package.json 属性说明
name - 包名。
version - 包的版本号。
scripts - 属性是一个对象,里边指定了项目的生命周期个各个环节需要执行的命令。key是生命周期中的事件,value是要执行的命令。
contributors - 包的其他贡献者姓名。
dependencies - 依赖包列表。如果我们的项目依赖了很多package,一个一个地安装非常麻烦。我们可以将项目依赖的包都在package.json这个文件里声明(如上面的json所示),然后一行命令npm install搞定。

package.json属性详解参考一篇博客:http://www.cnblogs.com/tzyy/p/5193811.html

卸载模块

我们可以使用以下命令来卸载 Node.js 模块。
$ npm uninstall express
卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:
$ npm ls
卸载全局模块:npm uninstall -g express-generator

更新模块

我们可以使用以下命令更新模块:
$ npm update express

搜索模块

使用以下来搜索模块:
$ npm search express

npm常用命令

除了上面的部分命令,NPM还提供了很多功能,package.json里也有很多其它有用的字段。
除了可以在npmjs.org/doc/查看官方文档外,这里再介绍一些NPM常用命令。
NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。
使用npm help可查看某条命令的详细帮助,例如npm help install。
在package.json所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。
使用npm update可以把当前目录下node_modules子目录里边的对应模块更新至最新版本。
使用npm update-g可以把全局安装的对应命令行程序更新至最新版。
使用npm cache clear可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。
使用npm unpublish@可以撤销发布自己发布过的某个版本代码。

使用淘宝 NPM 镜像

道国内直接使用 npm 的官方镜像是非常慢的,有时还可能失败,这时我们就需要使用淘宝 NPM 镜像。
淘宝 NPM 镜像是一个完整 npmjs.org 镜像,我们完全可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。

镜像的使用:

1. 单次使用

单次使用仅需在安装某个模块时指定代理:
npm install -g express-generator --registry=https://registry.npm.taobao.org

2. 全局使用

在用户目录下创建.npmrc文件并写入:registry = http://registry.npm.taobao.org 即可。
windows下为:C:\Users\userName\目录;
linux下为:/root/或其他用户目录;
快速创建文件命令:

1
$ echo "registry = http://registry.npm.taobao.org" > .npmrc

更多关于npmrc的使用参考: https://docs.npmjs.com/files/npmrc

3. 使用cnpm

我们也可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:

1
2
3
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
这样就可以使用 cnpm 命令来安装模块了:
$ cnpm install [name]

0%