NPM 使用指南:管理 Node js 项目依赖(三)

NPM(Node Package Manager)是 Node.js 的默认包管理工具,它不仅帮助开发者轻松下载、安装、共享和管理项目所需的依赖库和工具,还提供了丰富的命令行工具,使项目管理和维护变得更加高效。本文将详细介绍如何使用 NPM 安装、管理和卸载模块,以及如何处理全局和本地安装的问题。

NPM 概述

NPM 是 Node.js 自带的包管理工具,因此,通常你只需安装 Node.js,NPM 就会自动安装在系统中。你可以通过以下命令来检查 NPM 是否安装成功:

$ npm -v
2.3.0

如果显示版本号,说明 NPM 已成功安装。如果你安装的是旧版本的 NPM,可以通过以下命令进行升级:

$ sudo npm install npm -g

对于 Windows 用户,可以直接运行:

$ npm install npm -g

使用 NPM 安装模块

NPM 提供了简单易用的命令来安装模块。安装模块的基本语法如下:

$ npm install <Module Name>

例如,如果你想安装常用的 Node.js Web 框架 Express,可以运行以下命令:

$ npm install express

安装完成后,Express 包会被放置在项目的 node_modules 目录中。在代码中,你可以通过 require('express') 来引入这个模块:

const express = require('express');

全局安装与本地安装

NPM 支持两种安装模式:本地安装和全局安装。这两种模式各有其适用场景和特点。

本地安装

本地安装将模块安装在当前项目的 node_modules 目录中,并将信息保存到 package.json 的 dependencies 中。这种方式适用于项目依赖,确保每个项目可以有自己的依赖版本,提高项目的稳定性和可复现性。

本地安装命令

$ npm install express

本地安装的特点

  • 作用范围:仅在当前项目中可用。
  • 命令使用:npm install <package-name>。
  • 安装位置:项目的 node_modules 目录。
  • 使用场景:项目依赖(库、框架)。
  • 访问方式:通过 require() 或 import 使用。
  • 依赖声明:在 package.json 中记录。
  • 版本控制:通过 package.json 和 package-lock.json 文件管理依赖的版本。

全局安装

全局安装将模块安装在系统级别的目录中,通常用于命令行工具或需要在多个项目中使用的包。这种方式适用于那些不需要在每个项目中重复安装的工具或命令行实用程序。

全局安装命令

$ npm install express -g

全球安装的特点

  • 作用范围:在系统的全局环境中可用。
  • 命令使用:npm install -g <package-name>。
  • 安装位置:系统全局目录(依操作系统而异)。
  • 使用场景:CLI 工具、项目生成器。
  • 访问方式:在命令行中直接使用。
  • 依赖声明:不在 package.json 中记录。
  • 版本控制:全局安装的包版本由 NPM 管理,但不会在项目的 package.json 中体现。
  • 权限问题:可能需要管理员权限。

对比表

特性本地安装全局安装
安装范围仅在当前项目中可用在系统的全局环境中可用
命令使用npm install <package-name>npm install -g <package-name>
安装位置项目的 node_modules 目录系统全局目录(依 OS 而异)
使用场景项目依赖(库、框架)CLI 工具、项目生成器
访问方式通过 require() 或 import 使用在命令行中直接使用
依赖声明在 package.json 中记录不在 package.json 中记录
版本控制通过 package.json 和 package-lock.json 文件管理全局安装的包版本由 NPM 管理
权限问题无需特殊权限可能需要管理员权限

查看安装信息

你可以使用以下命令来查看所有全局安装的模块:

$ npm list -g

如果要查看某个模块的版本号,可以使用以下命令:

$ npm list <module-name>

例如,查看 grunt 的版本号:

$ npm list grunt

卸载模块

卸载模块的命令也非常简单:

$ npm uninstall <module-name>

例如,卸载 express:

$ npm uninstall express

卸载后,你可以到 node_modules 目录下查看包是否还存在,或者使用以下命令查看:

$ npm ls

更新模块

你可以使用以下命令来更新模块:

$ npm update <module-name>

例如,更新 express:

$ npm update express

搜索模块

使用以下命令来搜索模块:

$ npm search <module-name>

例如,搜索 express:

$ npm search express

创建模块

创建模块时,package.json 文件是必不可少的。你可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的元数据信息。

$ npm init

NPM 会引导你交互式地输入信息,生成 package.json 文件。例如:

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install 
<pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (node_modules) my-module
version: (1.0.0)
description: My Node.js module
entry point: (index.js)
test command: make test
git repository: https://github.com/username/my-module
keywords:
author:
license: (ISC)
About to write to /path/to/project/package.json:

{
  "name": "my-module",
  "version": "1.0.0",
  "description": "My Node.js module",
  "main": "index.js",
  "scripts": {
    "test": "make test"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/username/my-module"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

Is this ok? (yes) yes

在最后输入 "yes" 后会生成 package.json 文件。

发布模块

发布模块前,你需要在 NPM 资源库中注册用户:

$ npm adduser
Username: your-username
Password:
Email: (this IS public) your-email@example.com

注册成功后,你可以使用以下命令来发布模块:

$ npm publish

如果一切顺利,你的模块就会出现在 NPM 资源库中,其他开发者可以通过 NPM 安装和使用你的模块。

版本号管理

NPM 使用语义版本号(SemVer)来管理代码版本。版本号格式为 MAJOR.MINOR.PATCH,并可附加额外标记。

  • MAJOR(主版本):当你做了不兼容的 API 改动时增加。例如:2.0.0。
  • MINOR(次版本):当你添加新功能但保持向后兼容时增加。例如:1.1.0。
  • PATCH(补丁版本):当你修复 bug 而不增加新功能时增加。例如:1.0.1。
  • 额外标记
    • 预发布版本:如 1.0.0-alpha 或 1.0.0-beta.1,表示该版本仍在测试中。
    • 构建元数据:如 1.0.0+build.1,提供有关构建的信息。

安装特定版本的模块:

$ npm install <package-name>@<version>

例如,安装 express 的 4.17.1 版本:

$ npm install express@4.17.1

安装最新的主版本:

$ npm install <package-name>@^<version>

例如,安装 express 的最新 4.x.x 版本:

$ npm install express@^4.0.0

NPM 常用命令

NPM 提供了许多有用的命令,以下是一些常见的命令及其说明:

  • npm init:初始化一个新的 package.json 文件,交互式输入信息。

  • npm init -y:快速创建带有默认设置的 package.json 文件。

  • npm install <package-name>:本地安装指定包。

  • npm install -g <package-name>:全局安装指定包,使其在系统范围内可用。

  • npm install:安装 package.json 中列出的所有依赖。

  • npm install <package-name> --save-dev:安装包并添加到 devDependencies。

  • npm update <package-name>:更新指定的依赖包。

  • npm uninstall <package-name>:卸载指定的依赖包。

  • npm uninstall -g <package-name>:全局卸载指定的包。

  • npm list:查看当前项目的已安装依赖包列表。

  • npm list -g --depth=0:查看全局已安装的依赖包列表(不展开依赖树)。

  • npm info <package-name>:查看包的详细信息,包括版本和依赖等。

  • npm login:登录到 NPM 账号。

  • npm publish:发布当前包到 NPM 注册表。

  • npm unpublish <package-name>:从 NPM 注册表中撤销发布的包(一般限 24 小时内)。

  • npm cache clean --force:清理 NPM 缓存。

  • npm audit:检查项目依赖中的安全漏洞。

  • npm audit fix:自动修复已知的漏洞。

  • npm run <script-name>:运行 package.json 中定义的脚本,例如 npm run start。

  • npm start:运行 start 脚本(等同于 npm run start)。

  • npm test:运行 test 脚本。

  • npm build:运行 build 脚本。

  • npm outdated:列出项目中有可更新版本的依赖包。

  • npm version <patch/minor/major>:更新 package.json 中的版本号,自动更新版本。

  • npm ci:使用 package-lock.json 快速安装依赖,适用于 CI/CD 环境。

使用淘宝 NPM 镜像

由于国内直接使用 NPM 的官方镜像是非常慢的,为了解决这个问题,你可以使用淘宝提供的镜像(cnpm 或通过配置 NPM)来加速包的下载和安装。

安装 cnpm:

$ npm install -g cnpm --registry=https://registry.npmmirror.com

接下来,你可以使用 cnpm 来替代 npm 进行包的安装和管理:

$ cnpm install <package-name>

总结

NPM 是 Node.js 生态系统中不可或缺的一部分,它提供了强大的包管理功能,帮助开发者轻松管理项目依赖。通过本文的介绍,你应该已经掌握了如何使用 NPM 安装、管理和卸载模块,以及如何处理全局和本地安装的问题。希望这些知识能帮助你在 Node.js 项目开发中更加得心应手。