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” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:
$ node -v
v6.0.0
$ npm -v
3.8.6
如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:
$ npm install npm -g
使用 npm 命令安装模块
node包的安装分两种:本地安装、全局安装。两者的区别如下:
本地安装:package会被下载到当前所在目录,也只能在当前目录下使用。
全局安装:package会被下载到到特定的系统目录下,安装的package能够在所有目录下使用。
1. 本地安装
运行如下命令,就会在当前目录下安装 express-generator(基于Node.js平台的web应用开发框架,express-generator是一个快速生成express示例应用的生成器)
npm install express-generator
安装结束后,当前目录下回多出一个 node_modules 目录,express-generator就安装在里面。同时它的依赖模块也会安装自动安装,控制台也会打印出相关的依赖版本号。
2. 全局安装
刚才安装了express模块,但是控制台输入:
$ express
bash: express: command not found
会提示没有该命令。因为上面只进行了本地安装,我们只能进入安装目录node_modules/express-generator/bin
,然后执行$ ./express
,才可以使用该命令,不但不方便,而且不可以在任意目录生成应用。
对于这种应用(express-generator,hexo-cli,grunt-cli等)应该采用全局安装,而且十分简单,只需加上参数 -g
就可以了。
$ 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文件:
{
"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/
或其他用户目录;
快速创建文件命令:
$ echo "registry = http://registry.npm.taobao.org" > .npmrc
更多关于npmrc的使用参考: https://docs.npmjs.com/files/npmrc
3. 使用cnpm
我们也可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
这样就可以使用 cnpm 命令来安装模块了:
$ cnpm install [name]