Node.js开发指南
上QQ阅读APP看书,第一时间看更新

2.2 使用npm install

要使用npmjs.org上大量的第三方模块,需要使用npm install命令,这里只介绍最常用的格式。


// 安装模块,默认最新版本
npm install [<@scope>/]<name>
// 通过指定tag来安装模块
npm install [<@scope>/]<name>@<tag>
// 通过指定版本号来安装模块,如果版本号不存在会失败
npm install [<@scope>/]<name>@<version>
 // 通过指定版本号的范围来安装模块
npm install [<@scope>/]<name>@<version range>

下面是实际的使用例子。


// 安装angular-cli,默认最新版本
npm install @angular/cli
// 安装express 的4.17.1版本(4.17.1是版本号的同时也是tag)
npm installl express@4.17.1
// 安装指定版本范围内的koa,默认取上限
npm install koa@">=2.6.0 <2.8.1"

如果一个模块会被很多项目引用,或者一些模块本身提供了命令行工具,如angular-cli或者pm2,那么把这些模块安装在全局环境下是更好的选择。要以全局模式安装,只需要在运行npm install命令时加上-g参数即可,这样就可以在命令行中引用该模块。


// 全局模式安装gulp模块
$ npm install -g gulp
// 安装成功后便可以在控制台中使用gulp命令
$  gulp -v
CLI version: 2.2.0
Local version: 4.0.2

使用install命令而不带任何参数的情况下会把安装的模块名称和版本号写入package.json的dependencies字段中。使用全局模式安装的模块信息不会出现在package.json中。如果在运行npm install的时候不指定版本号,那么就会默认下载最新的版本。


"dependencies": {
    "@angular/cli": "^8.3.5",
    "express": "^4.17.1",
    "koa": "^2.8.0"
}

Node使用语义化的符号来表示模块的版本,表2-1列出了npm的版本号匹配规则。

表2-1 version字段匹配规则

有些在开发阶段用到的第三方模块在生产环境并不需要,如测试脚手架、代码分析库等。为了区分,package.json将第三方模块分成dependencies和devDependencies。

在运行npm install的时候增加--save-dev参数,就会把对应的模块信息写入devDependencies字段中。同时,当代码库上传到生产环境后,运行npm install --production,该命令会忽略devDependencies中的依赖,只安装dependencies字段下定义的模块。


// 将gulp作为devDependency安装
npm install gulp --save-dev

下面是一个完整的package.json文件示例。


{
  "name": "etest",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "directories": {
     "lib": "lib"
  },
  "dependencies": {
     "angular": "^1.7.9",
     "express": "^4.17.1"
  },
  "devDependencies": {
     "jasmine": "^3.5.0",
     "gulp": "^4.0.2"
  },
  "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1",
     "start": "node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}