NPM使用
Node Packaged Modules 简称NPM,是Node.js的包管理器。Node本身提供了一些基本API模块,但是这些基本模块难以满足开发者需求。Node需要通过使用NPM来管理开发者自我研发的一些模块,并使其能够共用与其他开发者。简单来说,NPM就是Node.js的包管理器。
NPM(node package manager)
NPM使用场景
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 npm -v来测试是否成功安装。命令如下,出现版本提示表示安装成功:
$ npm -version
2.15.8
升级更新NPM
$ sudo npm install npm -g
使用NPM安装模块
有一个简单安装任何Node.js模块,语法如下:
$ npm install <Module Name>
例如,下面是安装一个著名的Node.jsweb框架模块的命令叫 express:
$ npm install express
现在,你可以在js文件中使用此模块如下:
var express = require('express');
全局安装VS本地安装
- 本地安装 默认情况下,NPM安装指定包默认会安装到本地。本地安装指的是包安装在当前目录中node_modules文件夹中。本地安装的包都可以通过require()方法进行访问。例如我们安装Express模块:
$ npm install express
列出所有本地安装的模块
$ npm ls
- 全局安装 全局安装包都存储在系统目录中。我们可以在nodejs的CLI(命令行界面)使用,但是不能直接使用require()方法进行访问。例如安装http-server包:
//全局安装 -g
$ npm install -g http-server
//使用node CLI
$ http-server
卸载模块
使用下面的命令卸载Node.js模块
npm uninstall express
更新模块
更加package.json并更新
npm update express
搜索模块
搜索使用NPM包名
npm search express
下载三方包
NPM建立了一个NodeJS生态圈,NodeJS开发者和用户可以在里边互通有无。
当你需要下载第三方包时,首先要知道有哪些包可用。npmjs.com提供了可以根据包名来搜索的平台,但是如果不知道包名可以百度一下。知道了包名后,就可以使用命令去安装了,例如:Express
npm install express
下载完成之后,express包就放在了工程目录下的node_modules目录中,在代码中只需要通过reuqire(‘express’)的方式去引用,无需指定包路径。
以上命令默认下载最新版本第三方包,如果要下载指定版本,可以在包名后面追加@,例如通过如下命令可以下载0.0.1版本的express。
npm install express@0.0.1
如果使用到的第三方包比较多,在终端下一个包一条命令的安装非常不方便,因此NPM对package.json的字段做了扩展,允许在其中添加三方包依赖。
{
"name":"test",
"main":"./lib/main.js",
"dependencies":{
"http-server":"3.2.1"
}
}
这样处理后,在工程目录下就可以使用npm install命令批量安装三包了。最重要的是,当以后吧test项目上传到了NPM服务器,别人下载这个包时,NPM会根据包中声明的三方依赖包进行自动下载依赖。这样用户只需要关心要使用的包,不用管其依赖的三方包。
给NPM服务器发布自己的包
第一次使用NPM发布自己的包需要在npmjs.com注册一个账号
几个npm的常用命令
npm -v #显示版本,检查npm 是否正确安装。
npm install express #安装express模块
npm install -g express #全局安装express模块
npm list #列出已安装模块
npm show express #显示模块详情
npm update #升级当前目录下的项目的所有模块
npm update express #升级当前目录下的项目的指定模块
npm update -g express #升级全局安装的express模块
npm uninstall express #删除指定的模块