NPM 和 NPX:深入比较,了解如何选择本文深入探讨 npm 和 npx 的区别,阐明如何有效管理项目依赖和执行 CL
如果你一直在使用 Node.js,可能会遇到 npm 和 npx。虽然它们听起来相似,并且都是 Node.js 生态系统的重要组成部分,但它们的用途却截然不同。本文将深入探讨这两者之间的区别,帮助你理解在何时以及为何使用它们。
什么是 NPM?
npm 的发展历程
npm 于 2010 年推出,旨在解决 JavaScript 模块管理的问题。随着 Ryan Dahl 创建 Node.js,使得 JavaScript 能够在服务器端运行,npm 被引入作为 Node.js 的包管理器,最初被称为 "Node Package Manager"。随着时间推移,npm 的功能不断扩展,成为整个 JavaScript 生态系统的关键组成部分,代表着一个强大的工具和社区。
NPM 是 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 之间的主要区别:
-
包的安装 vs 包的执行
-
NPM:使用npm安装包时,它会将包安装在全局或项目目录中。这意味着你必须先安装包,才能使用它。npm install -g create-react-app create-react-app my-app -
NPX:使用npx,你可以在不全局安装的情况下运行CLI工具或可执行文件。例如:npx create-react-app my-app
这节省了时间和磁盘空间,因为你可以避免安装那些可能只用一次的包。
-
-
全局包
使用
npm时,全局包会在系统中持续存在,可能会造成环境混乱。使用npx,你可以执行包而无需担心它在系统中的长期存在。使用
npm全局安装包的示例:npm install -g typescript tsc --version使用
npx,无需全局安装:npx tsc --version -
自动包处理
使用
npx时,它会自动检查该包是否在本地或全局存在,如果不存在,则临时下载并执行。这对运行一次性任务尤其有用。例如:npx cowsay "Hello, World!"如果未安装
cowsay包,这将下载并运行它,然后进行清理。 -
无需脚本的包可执行文件
当使用
npm运行在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 执行包,而无需永久安装。这个小小的区别可以使你的工作流程更高效,节省时间并避免不必要的全局安装。
转载自:https://juejin.cn/post/7425932970592370714