npm包管理机制

 2015年03月09日    270     声明


NPM,Node包管理器(Node Package Manager)功能包括:第三方包库、管理计算机中安装的包的机制及定义包依赖关系。提供了公共注册服务,程序员发布的包都被放在了NPM中,NPM提供了一个命令行工具用来下载、安装、管理这些包。你可以按NPM标准的包描述符来指定自己的模块或应该需要依赖的第三方包。


全局模式和本地模式

NPM有两种工作方式:全局模式和本地模式,这两种模式在包的存储目录上有所不同,对Node载入包的方式也有影响。本地模式是NPM的默认工作方式,在本地模式下NPM只对本地文件夹产生影响。全局模式适合安装那些可全局使用的包。

全局模式

全局模式安装包时,NPM会将包安装到/usr/local/lib/node_modules目录下(安装Node时使用的是默认目录),由于NPM默认使用本地模式,因些使用全局模式要显示的指定-g参数,安装命令如下:

npm install -g

例如,全局安装express模块:

npm install -g express
在项目中引用:
var express = require('express');

本地模式

本地模式是推荐的模块使用模式,如果不清楚某个模式该使用全局模式还是本地模式,那么请使用本地模式。在本地模式下,NPM将所有模块都安装到当前工作目录的node_modules目录下。比如:当前前的工作目录为/home/liuht/myApp,那么NPM会把包存储到/home/liuht/myApp/node_modules目录中,node_modules目录不存在时,NPM安装包时会自动创建该目录。本地模式安装的包优先级高于全局模式安装的包。

本地模式使用以下命令安装包:

npm install <包名>

例如,本地安装request模块:

npm install request

在实际工作中,安装包时可能需要指定包的版本号,命令格式如下:

npm install <包名>@<版本号>

例如,安装2.44版本的request模块:

npm install request@2.44

也可以使用版本号范围,安装某一版本范围的包版本。比如,安装版本号前缀为2.4的版本的request模块:

npm install request@2.4.x

可以通过以下命令,安装版本号大于2.0的request模块:

npm install request@">2.0"

还可以使用如下命令组合,安装指定范围的版本号的包:

npm install request@">=2.0 <2.5"


更新包

更新本地械安装的包,命令格式如下:

npm update <包名>
更新全局模式安装的包,命令格式如下:
npm update -g <包名>


卸载包

卸载本地模式安装的包,命令格式如下:

npm uninstall <包名>

卸载全局模式安装的包,命令格式如下:

npm uninstall -g <包名>


依赖关系管理

NPM不仅会安装你指定的包,还会安装这些包所依赖的包,其所依赖包会被安装到本包的node_modules目录下。例如,你安装了A包,A包又依赖B包,刚NPM会自动安装B包到./node_modules/A/node_modules目录下

用package.json管理依赖关系

可以在应用程序的根目录中添加一个package.json,package.json是一个JSON格式的文件,可以定义应用程序的一些元数据,如:名称、作者、依赖包等。示例如下:

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "async": "^0.9.0",
    "request": "^2.44.0"
  }
}

上面文件中的dependencies属性声明了程序所依赖的第三方包,执行以下命令NPM会分析依赖关系,并将依赖模块下载到node_modules目录中:

npm install
也可以通过以下命令将自己指定的依赖包安装到本地并更新到最新:
npm update