npm 与 npx

发布:2024-10-26 10:49 阅读:15 点赞:0

如果您一直在使用 Node.js,那么很可能已经接触过 npm 和 npx。虽然它们听起来相似,并且都是 Node.js 生态系统的重要组成部分,但它们各自有不同的用途。本文将探讨 npm 和 npx 之间的差异,帮助您理解何时以及为何使用它们。

一. 什么是 npm?

npm,全称 Node Package Manager,是 Node.js 默认的包管理工具。它允许开发者在其项目中安装、分享和管理包(库或代码模块)。

以下是一些 npm 常见的任务:

安装依赖项

# 安装指定包
npm install <package-name>

管理包版本

锁定特定版本的库以确保构建的一致性。

运行项目特定的脚本

# 在 package.json 文件中定义的脚本
npm run <script-name>

二. 什么是 npx?

npx 是在 npm 版本 5.2.0(2017 年 7 月)中引入的一个工具。虽然 npm 负责管理依赖项和包,但 npx 的设计目的是执行 Node.js 包,特别是不需要全局安装的命令行界面(CLI)工具。

三. npm 与 npx 的主要区别

1. 包安装 vs 执行

npm

当你使用 npm 安装一个包时,它要么全局安装该包,要么将其安装到项目的本地目录。这意味着你需要先安装一个包才能使用它。

# 全局安装 create-react-app
npm install -g create-react-app
# 使用 create-react-app 创建项目
create-react-app my-app

npx

使用 npx,你可以无需全局安装即可运行 CLI 工具。例如,你可以运行 create-react-app 而不必全局安装它。

# 使用 npx 运行 create-react-app
npx create-react-app my-app

这样做节省了时间和磁盘空间,因为你避免了安装那些你可能只使用一次的包。

2. 全局包管理

npm

使用 npm 时,全局包会安装并保留在系统中,有时会导致环境变得混乱。

npx

使用 npx 时,你可以运行一个包而不必担心它会永久驻留在系统中。

示例:使用 npm 全局安装 TypeScript
# 全局安装 TypeScript
npm install -g typescript
# 查看 TypeScript 版本
tsc --version
示例:使用 npx 不需全局安装即可运行 TypeScript
# 使用 npx 查看 TypeScript 版本
npx tsc --version

3. 自动包处理

当你使用 npx 运行命令时,它会自动检查该包是否已本地或全局安装,如果没有,则下载并临时执行它。这对于一次性任务特别有用。

# 运行 cowsay 命令
npx cowsay "Hello, World!"

这将下载 cowsay 包(如果未安装),运行它,然后清理。

4. 直接运行包可执行文件

当使用 npm 运行 package.json 中定义的命令时:

# 运行 package.json 中定义的脚本
npm run my-script

但是,使用 npx,你可以直接运行可执行命令:

# 直接运行可执行命令
npx my-script

这在脚本没有明确在 package.json 中定义的情况下特别有用。

四. 何时使用 npm?

  • 管理依赖项:使用 npm 来安装、更新和移除项目的依赖项。
  • 运行项目特定的脚本:在 package.json 中定义并与项目相关的脚本。
  • 管理包版本:锁定特定版本的库以维持项目的稳定性。

五. 何时使用 npx?

  • 一次性包执行:使用 npx 运行那些不需要全局安装的包,比如你只会用一次的 CLI 工具。
  • 运行可执行文件:对于像 create-react-app 这样的命令,npx 允许你在没有全局安装的情况下运行它们。
  • 测试不同版本:快速执行某个工具的特定版本而不必实际安装它。

六. 结论

  1. npm 和 npx 都是 Node.js 生态系统中的重要工具,但它们各自有不同的用途。使用 npm 来管理项目的依赖项,而使用 npx 来执行不需要永久安装的包。
  2. 这一小小的不同可以使您的工作流程更加高效,节省时间并避免不必要的全局安装。