Node.js NPM 教程
NPM 介绍
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 的包/模块提供了在线存储库,你可以在其官方站点上方便地搜索这些包/模块。
- 提供了一个命令行程序(CLI),帮助开发人员管理Node.js包。
注意,Node.js项目中,任何包或模块都需要通过NPM安装。
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 帮助下载各种独立的工具,可以立即使用
- 使用 npx,你甚至可以不下载包,就直接运行它
- NPM 创建各种组织来协调包的开发和维护
- NPM 可以帮助组建虚拟团队,甚至可以将代码限制到特定的开发人员
- NPM 帮助管理和维护各种版本的代码及其依赖关系
- NPM 帮助自动更新应用程序
- NPM 就像一个社区,在这里,你总可以找到从事类似项目的其他开发人员,与他们共享成果
现在,你已经知道了NPM的作用,让我们继续深入研究。首先,让我们了解什么是npm包/模块。
NPM 包(Package)
包是打包成独立逻辑单元的一组代码。对于开发人员来说,包是方便的工具,包有助于代码重用,项目结构优化。NPM社区内,大约有800,000多个现成的代码包可用,每个包都提供了各种有用的功能。
但是,如果你不能确切地知道哪种包最适用,那就无异于大海捞针。下面列出了常用的NPM库,供参考:
- express
- body-parser
- nodemon
- lodash
- babel-core
- async
- debug
- react
- vue
- request
- moment
使用这些包之前,需要在系统中安装NPM。
NPM 管理包
根据安装方式的不同,Node.js包可分为两类:
- 本地包(Local Packages)
- 全局包(Global Packages)
本地包(Local Packages)
这些包安装在执行 install 命令的当前目录下,存储在当前目录下的node_modules文件夹中,只有当前目录下的项目才能使用。
下面是本地安装包的命令:
npm install <package-name>
全局包(Global Packages)
这些包安装在系统中的一个位置,与执行install命令的目录位置无关。全局包可以被系统中的任何项目使用。
要安装全局包包,可以使用以下命令:
npm install -g <package-name>
下面这些常用的包,通常会全局安装:
- npm
- create-react-app
- vue-cli
- grunt-cli
- mocha
- react-native-cli
- gatsby-cli
- forever
- nodemon
本地包与全局包的区别
本地包和全局包之间的主要区别是,全局包用于多个项目,本地包仅用于单个项目。但是一般来说,本地安装包是一个很好的实践。因为系统中可能有许多Node.js项目,使用的包虽相同,但版本不同,本地安装可以避免版本冲突。
例如,如果更新一个全局包,所有依赖它的项目都会被影响,有可能部分项目与包的新版本不兼容。但是对于本地包,因为仅限于单个项目使用,所以本地包更新不会影响其他项目。就资源利用而言,本地安装似乎浪费硬盘空间,但是负面影响较小,毕竟硬件总是越来越便宜。
可以通过下面的命令,来检查系统中有多少全局包。
npm list -g --depth 0
如果想删除包,可以下命令:
npm uninstall <package_name>
安装包时,建议包含--save
标志:
npm install <package_name> --save
作用是把安装的包添加到package.json
文件中。
现在,你已经知道怎么安装、删除包。
NPM Package.json
Node.js项目中,Package.json
文件是应用程序的核心。Package.json
文件是一个保存了项目元数据的配置文件,通常出现在Node.js应用程序的根文件夹中,npm install
命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
Package.json 格式
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
文件包含了项目中各种信息配置。让我们详细了解一下一些常用信息:
- Name: 应用程序名称
- Version: 应用程序的版本
- Description: 应用程序描述信息
- Main: 指定了加载的入口文件,require(‘moduleName’)就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。
- Scripts: 指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。
- Author: 开发人员
- License: 许可证
- Dependencies: 指定了项目运行所依赖的模块
- DevDependencies: 指定项目开发所需要的模块
- Repository: 关于应用程序代码所在的存储库信息及网址等
- Bugs: 报告应用程序bug的网址或电子邮件
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
属性。