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