一、什么是npm?
Node
包管理器(npm
)是一个由Node.js
官方提供的第三方包管理工具,就像PHP、Pear、Python的PyPI一样。npm
是一个完全由JavaScript
实现的命令行工具,通过Node.js
执行,因此严格来讲它不属于Node.js
的一部分。在最初的版本中,我们需要在安装完Node.js
以后手动安装npm
。但从Node.js 0.6
开始,npm
已包含在发行包中了,安装Node.js
时会自动安装npm
。
二、安装Node.js和更新npm
1. 安装Node.js
从nodejs.org下载并安装.
安装完成后,打开cmd
(Windows),或者终端(Linux)运行命令:
node -v
查看Node.js版本。
2. 更新npm
安装好Node.js后,会有一个自带的npm可以使用。但是,npm更新的频率比Node.js要高,所以我们运行命令更新npm至最新版本。
Linux:
sudo npm install npm -g
Windows:
npm install npm -g
安装完毕后,运行命令:
npm -v
查看npm版本。
三、npm目录权限问题
全局安装一个package
时,可能会出现没有权限的错误提示,这表示你对这个npm
存储全局package
和命令行工具的目录(npm
安装目录)没有权限。
两种解决方案:
-
获取
npm
安装目录的权限。 -
指定
npm
的默认安装目录为其他有权限操作的目录。
方案一、获取npm
安装目录的权限
1.使用如下命令查看npm
的安装目录:
npm config get prefix
例如:执行命令后,win8.1
系统的npm
安装目录为:C:\Users\novaline\AppData\Roaming\npm
。
对于Linux系统,可能是/usr/local
。
2.获得npm
安装目录权限(Linux):
sudo chown -R '你的系统用户名' <directory>
如果你不想改变这个目录的权限,可以只获取npm
目录下子目录的权限,如lib/node_modules
,bin
,share
目录。
方案二、指定npm
的默认安装目录为其他有权限操作的目录
有时候你并不想改变npm
默认安装目录的权限,可以指定npm
使用其他的目录。
1.创建一个用于安装全局package
的目录
mkdir ~/npm-global
2.配置npm
使用这个新目录
npm config set prefix '~/npm-global'
3.打开或创建~/.profile
文件添加环境变量:
export PATH=~/npm-global/bin;$path
4.关闭~/.profile
文件,回到终端或者命令行(cmd),运行:
source ~/.profile
测试:不使用sudo
,下载一个全局package
。
npm install -g jshint
四、安装npm
包(package
)
安装npm
包有两种方式:本地和全局。使用本地还是全局安装package
取决于你想怎么使用这个package
。
如果只是你自己的模块依赖这个package
,使用本地安装,本地安装前,先在命令行工具(cmd)或者终端里切换到准备安装的目录下。
如果是作为一个命令行工具来使用,比如grunt CLI
(grunt
命令行工具),使用全局安装。全局安装,不需要在命令行工具(cmd)或者终端里切换到某个目录下,任意目录下的全局安装,最后都会安装在npm
的安装目录的node_modules
目录下。
开始安装package
在命令行工具(cmd)或者终端输入npm install <package name>
命令,就可以下载并安装一个package
,如:
npm install lodash
说明:执行该命令,将会创建一个node_modules
目录(如果该目录不存在的话),并下载安装的package
到该目录。安装完成后,你会在node_modules
目录下发现该package
。
使用安装的package
现在这个package
已经在node_modules
目录下,你可以在你的代码里使用它了。例如:如果你创建了一个Node
模块,你可以require
它。
创建一个index.js文件,包含如下代码:
var lodash = require('lodash');
var output = lodash.without([1, 2, 3], 1);
console.log(output);
测试:使用node index.js
运行,输出结果为:[2, 3]
使用--save
标识
管理本地npm package
的另一种方法是创建一个package.json
文件。如果在你的项目目录下有一个package.json
文件,当你运行npm install
命令时,npm
将查看package.json
文件中的dependencies
字段对应的package
列表,这种方法可以使你不必每次都一个一个安装,并且你也可以和把这个package.json
文件分享给其他开发者。
在你的项目目录下创建一个package.json
文件
{
"name": "demo-app"
"version": "1.0.0"
}
使用--save
标识下载安装package
npm install lodash --save
说明:上述命令在下载安装package
的同时,还会在package.json
文件的dependencies
字段添加该package
的名称和版本号。结果如下:
{
"name": "demo-app",
"version": "1.0.0",
"dependencies": {
"lodash": "^3.2.0"
}
}
手动添加dependencies
字段对应的package
例如:
"dependencies": {
"lodash": "^2.4.1",
"tap": "*"
}
说明:tap
包是手动添加的,再次运行npm install
命令,你会发现在node_modules
目录下多了tab
包的目录。
一、更新本地包(package
)
首先,在命令行工具(cmd)或者终端切换到项目目录下,package.json
文件最好就放在项目目录下。运行命令:
npm update
更新所有node_modules
目录下的package
包。
二、卸载包(package
)
你可以从node_modules
目录下卸载并删除一个package
包,使用npm uninstall <package name>
命令,例如:
npm uninstall lodash
如果卸载的同时想把这个package
包的信息从package.json
文件的dependencies
字段中也一并删除,要加上--save
标识,例如:
npm uninstall --save lodash
三、全局安装package
包
npm install -g jshint
如果出现权限错误,请参考==npm快速入门(一)==。
四、更新全局package
包
要更新某一个全局package
包,可以使用npm install -g <package name>
,例如:
npm install -g jshint
如果想知道哪个package
包有更新,可以使用:
npm outdated -g--depth=0
运行命令后,例如:
Package Current Wanted Latest Location
lodash 3.1.0 3.1.0 3.2.0 lodash
lodash
包的最新版是3.2.0
,当前版本是3.1.0
。
如果想更新全局所有的package
包,使用
npm update -g
但是官方不推荐使用,有一个问题需要修复。
五、卸载全局package
包
命令:
npm uninstall -g jshint
六、创建一个Node.js
模块
Node.js
模块也是一种可以被发布到npm
上的package
包。
使用npm init
命令可以快速创建一个package.json
文件,命令会提示你输入一些组成package.json
文件的字段和值,name
和version
字段是必须的。