NPM 是 Node Package Manager 的缩写,意思是Node包管理器。
NPM 是 Node.js 的默认包管理器,完全用JavaScript编写。它由Isaac Z. Schlueter开发,并于2010年发布。
从那时起,NPM负责管理所有Node.js包和模块。www.npmjs.com上有海量的Node.js包,完全免费,开源,全世界的开发者可以在上面共享Node.js包。
NPM的两个主要功能是:
注意,Node.js项目中,任何包或模块都需要通过NPM安装。
从0.6.3版本开始,NPM就作为Node.js的默认包,包含在Node.js中。安装Node.js的同时,会默认安装NPM。可以从Node.js官网:https://nodejs.org下载安装Node.js。
检查NPM是否已经安装,可以使用下面的命令。
$ npm -v
NPM 作用很多,下面列出了最基本的几点:
现在,你已经知道了NPM的作用,让我们继续深入研究。首先,让我们了解什么是npm包/模块。
包是打包成独立逻辑单元的一组代码。对于开发人员来说,包是方便的工具,包有助于代码重用,项目结构优化。NPM社区内,大约有800,000多个现成的代码包可用,每个包都提供了各种有用的功能。
但是,如果你不能确切地知道哪种包最适用,那就无异于大海捞针。下面列出了常用的NPM库,供参考:
使用这些包之前,需要在系统中安装NPM。
根据安装方式的不同,Node.js包可分为两类:
这些包安装在执行 install 命令的当前目录下,存储在当前目录下的node_modules文件夹中,只有当前目录下的项目才能使用。
下面是本地安装包的命令:
npm install <package-name>
这些包安装在系统中的一个位置,与执行install命令的目录位置无关。全局包可以被系统中的任何项目使用。
要安装全局包包,可以使用以下命令:
npm install -g <package-name>
下面这些常用的包,通常会全局安装:
本地包和全局包之间的主要区别是,全局包用于多个项目,本地包仅用于单个项目。但是一般来说,本地安装包是一个很好的实践。因为系统中可能有许多Node.js项目,使用的包虽相同,但版本不同,本地安装可以避免版本冲突。
例如,如果更新一个全局包,所有依赖它的项目都会被影响,有可能部分项目与包的新版本不兼容。但是对于本地包,因为仅限于单个项目使用,所以本地包更新不会影响其他项目。就资源利用而言,本地安装似乎浪费硬盘空间,但是负面影响较小,毕竟硬件总是越来越便宜。
可以通过下面的命令,来检查系统中有多少全局包。
npm list -g --depth 0
如果想删除包,可以下命令:
npm uninstall <package_name>
安装包时,建议包含--save
标志:
npm install <package_name> --save
作用是把安装的包添加到package.json
文件中。
现在,你已经知道怎么安装、删除包。
Node.js项目中,Package.json
文件是应用程序的核心。Package.json
文件是一个保存了项目元数据的配置文件,通常出现在Node.js应用程序的根文件夹中,npm install
命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
Package.json文件内容通常如下所示。
{ "name": "Hello World", "version": "0.0.1", "author": "qikegu.com", "description": "第一个node.js程序", "keywords":["node.js","javascript"], "repository": { "type": "git", "url": "https://path/to/url" }, "license":"MIT", "engines": {"node": "0.10.x"}, "bugs":{"url":"http://path/to/bug","email":"bug@example.com"}, "contributors":[{"name":"李四","email":"lisi@example.com"}], "scripts": { "start": "node index.js" }, "dependencies": { "express": "latest", "mongoose": "~3.8.3", "handlebars-runtime": "~1.0.12", "express3-handlebars": "~0.5.0", "MD5": "~1.2.0" }, "devDependencies": { "bower": "~1.2.8", "grunt": "~0.4.1", "grunt-contrib-concat": "~0.3.0", "grunt-contrib-jshint": "~0.7.2", "grunt-contrib-uglify": "~0.2.7", "grunt-contrib-clean": "~0.5.0", "browserify": "2.36.1", "grunt-browserify": "~1.3.0", } }
如上所示,package.json
文件包含了项目中各种信息配置。让我们详细了解一下一些常用信息:
package.json文件可以手工编写,也可以使用npm init
命令自动生成。
$ npm init
这个命令采用互动方式,要求用户回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。
有了package.json文件,直接使用npm install
命令,就会在当前目录中安装所需要的模块。
$ npm install
如果一个模块不在package.json文件之中,可以单独安装这个模块,并使用相应的参数,将其写入package.json文件之中。
$ npm install express --save $ npm install express --save-dev
上面代码表示单独安装express模块,--save
参数表示将该模块写入dependencies
属性,--save-dev
表示将该模块写入devDependencies
属性。