npm 与 npx
阅读: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 允许你在没有全局安装的情况下运行它们。 -
测试不同版本:快速执行某个工具的特定版本而不必实际安装它。
六. 结论
-
npm 和 npx 都是 Node.js 生态系统中的重要工具,但它们各自有不同的用途。使用 npm 来管理项目的依赖项,而使用 npx 来执行不需要永久安装的包。 -
这一小小的不同可以使您的工作流程更加高效,节省时间并避免不必要的全局安装。