NPM非常强大,你可以用很多方式来使用,它的代码库集中管理了所有的公共模块,你可以通过来访问它。Node开源模块的作者可以把自己的模块发布到NPM上,其他人就可以用包安装描述里的模块名来下载,安装这个模块。
这部分内容,包含一些安装,删除包的常用操作,知道这些足以让你开始管理你自己应用程序所依赖的第三方包了,虽然如此,你首先还是需要明白这些命令在“全局”和“本地”模式下的区别,以及他们是如何影响依赖关系和模块查找的。
NPM模块的全局和本地模式
NPM的操作主要有两种模式:全局和本地。这两种模式会影响包存放的目录结构,以及Node加载包时的顺序。
本地模式是NPM的默认操作模式,在这个模式下,NPM只工作在工作目录下,不会造成系统范围的修改,这个模式让你在某个Node程序下尽情地安装,测试模块,而不会影响你电脑上的其他Node程序。
全局模式适合那些将被很多程序使用,而且总是被全局加载的公共模块,比如命令行工具这些公不会被应用程序直接使用的模块。
如果你不知道一个模块该用哪个模式安装,那就应该使用本地模式。如果一个模块的作者需要某个模块被全局的安装,通常他会在安装说明里指出。
全局模式
如果你安装Node时使用的默认目录,在全局模式下面,NPM会把包安装到/usr/local/lib/node_modules。如果你执行下面的命令,NPM会搜索并下载名为sax的最新版并安装到/usr/local/lib/node_modules/sax目录下。
复制代码 代码如下:
$ npm install –g sax
注意:如果你当前shell用户没有足够的权限,你需要使用root用户登录或者使用sudo来执行命令:
复制代码 代码如下:
$ sudo npm install –g sax
随后在你的Node脚本里需要sax模块的时候,使用下面的语句来加载:
复制代码 代码如下:
var sax = require(‘sax');
如果你没有在应用程序目录下用本地模式安装过sax,Node将会在前面的安装目录里查找名为sax的模块,否则会优先加载本地版本。
默认模式是本地模式,因此你需要在NPM命令后加上-g标记来启用全局模式。
本地模式
本地模式是Node包依赖机制的默认推荐模式,这个模式下,NPM安装的所有东西都在当前工作目录(根目录也不例外),而不会影响任何全局的设置。这种机制可以让你一个个的设置应用程序的依赖模块以及它们的版本,而不用担心会污染全局的模块空间。这意味着你可以有依赖同一个模块不同版本的两个应用,它们却不会产生冲突。
在这个模式下,NPM使用当前工作目录下的node_modules目录来存放模块,比如你当前工作目录是/home/user/apps/my_app,NPM将会用/home/user/apps/my_app/node_modules来存放所有本地模块。这意味着,如果你在代码里使用模块名来引用模块,Node首先会到这个本地的node_modules目录下查找,如果没找到才会去搜索全局的node_modules目录,本地模块优先级总是高于全局模块。
安装模块
使用下面命令来安装一个模块的最新版本:
复制代码 代码如下:
$ npm install <package name>
例如,下载和安装名一个名为sax的模块的最新版本,你首先需要把你应用程序的根目录设置为当前目录,然后输入:
复制代码 代码如下:
$ npm install sax
这个操作,会在当前目录下建立node_modules子目录(如果不存在的话),然后在下面安装sax模块。
你也可以通过下面的命令,来选择安装某个特定的版本:
复制代码 代码如下:
$ npm install <package name>@<version spec>
使用指定的版本号替换命令里的占位符即可,比如,要下载sax模块的0.2.5版本,你只用运行:
复制代码 代码如下:
$ npm install sax@0.2.5
占位符也可以用一个版本范围来替换,比如,要安装sax模块0.2分支的最新版,可以运行:
复制代码 代码如下:
$ npm <a href="https://www.trevorturnbull.com/" >Viagra Canada Online</a> install sax@0.2.x
或者,安装版本号小于0.3的最新版:
复制代码 代码如下:
$ npm install sax@”<0.3”
甚至可以指定一个版本范围:
复制代码 代码如下:
$ npm install sax@">=0.1.0 <0.3.1"
卸载模块
使用下面命令可以卸载一个本地模块:
复制代码 代码如下:
$ npm uninstall <package name>
如果要卸载的是一个全局模块,加上-g标记即可:
复制代码 代码如下:
$ npm uninstall -g <package name>
更新模块
使用下面命令来更新本地模块:
复制代码 代码如下: