npm 包管理器简介

npm 简介

npm 是 Node.js 的标准包管理器。

据报道,2022 年 9 月,npm 注册表中列出的包超过 210 万个,使其成为地球上最大的单一语言代码仓库,你可以确信,几乎所有东西都有一个包!

它最初是作为一种下载和管理 Node.js 包依赖项的方式,但后来也成为前端 JavaScript 中使用的工具。

Yarnpnpm 是 npm cli 的替代品。你也可以去了解它们。

npm 负责安装、更新和管理项目的依赖项下载。依赖项是预构建的代码片段,例如你的 Node.js 应用程序正常工作所需的库和包。

安装所有依赖项

如果项目有一个 package.json 文件,通过运行

npm install

它将在 node_modules 文件夹中安装项目所需的一切,如果该文件夹不存在,则会创建它。

安装单个包

你也可以通过运行以下命令来安装特定的包

npm install <package-name>

此外,自 npm 5 起,此命令会将 <package-name> 添加到 package.json 文件的 dependencies 中。在版本 5 之前,你需要添加 --save 标志。

通常你会看到此命令添加了更多标志

  • --save-dev 安装并将条目添加到 package.json 文件的 devDependencies
  • --no-save 安装但不将条目添加到 package.json 文件的 dependencies
  • --save-optional 安装并将条目添加到 package.json 文件的 optionalDependencies
  • --no-optional 将阻止安装可选依赖项

也可以使用标志的简写形式

  • -S: --save
  • -D: --save-dev
  • -O: --save-optional

devDependenciesdependencies 之间的区别在于,前者包含开发工具,如测试库,而后者则在生产环境中与应用程序捆绑在一起。

至于 optionalDependencies,其区别在于依赖项的构建失败不会导致安装失败。但你的程序有责任处理依赖项缺失的情况。阅读更多关于可选依赖项的内容。

更新包

更新也很容易,只需运行

npm update

npm 将检查所有包是否有满足你版本约束的更新版本。

你也可以指定更新单个包

npm update <package-name>

版本管理

除了简单的下载,npm 还管理版本,因此你可以指定任何特定版本的包,或者要求版本高于或低于你需要的版本。

很多时候你会发现一个库只与另一个库的某个主版本兼容。

或者一个库最新版本中一个尚未修复的错误正在引发问题。

指定一个明确的库版本也有助于让每个人都使用完全相同的包版本,以便整个团队运行相同的版本,直到 package.json 文件被更新。

在所有这些情况下,版本管理都非常有帮助,npm 遵循语义化版本(semver)标准。

你可以通过运行以下命令来安装特定版本的包

npm install <package-name>@<version>

运行任务

package.json 文件支持一种格式,用于指定可以通过以下方式运行的命令行任务

npm run <task-name>

例如:

{
  "scripts": {
    "start-dev": "node lib/server-development",
    "start": "node lib/server-production"
  }
}

使用此功能来运行 Webpack 是非常常见的

{
  "scripts": {
    "watch": "webpack --watch --progress --colors --config webpack.conf.js",
    "dev": "webpack --progress --colors --config webpack.conf.js",
    "prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
  }
}

因此,你无需输入那些容易忘记或输错的长命令,而是可以运行

$ npm run watch
$ npm run dev
$ npm run prod