likes
comments
collection
share

NPM 和 NPX:深入比较,了解如何选择本文深入探讨 npm 和 npx 的区别,阐明如何有效管理项目依赖和执行 CL

作者站长头像
站长
· 阅读数 67

如果你一直在使用 Node.js,可能会遇到 npmnpx。虽然它们听起来相似,并且都是 Node.js 生态系统的重要组成部分,但它们的用途却截然不同。本文将深入探讨这两者之间的区别,帮助你理解在何时以及为何使用它们。

什么是 NPM

npm 的发展历程

npm 于 2010 年推出,旨在解决 JavaScript 模块管理的问题。随着 Ryan Dahl 创建 Node.js,使得 JavaScript 能够在服务器端运行,npm 被引入作为 Node.js 的包管理器,最初被称为 "Node Package Manager"。随着时间推移,npm 的功能不断扩展,成为整个 JavaScript 生态系统的关键组成部分,代表着一个强大的工具和社区。

NPMNode.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 工具,而无需全局安装。

npmnpx 之间的主要区别:

  1. 包的安装 vs 包的执行

    • NPM:使用 npm 安装包时,它会将包安装在全局或项目目录中。这意味着你必须先安装包,才能使用它。

      npm install -g create-react-app
      create-react-app my-app
      
    • NPX:使用 npx,你可以在不全局安装的情况下运行 CLI 工具或可执行文件。例如:

      npx create-react-app my-app
      

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

  2. 全局包

    使用 npm 时,全局包会在系统中持续存在,可能会造成环境混乱。使用 npx,你可以执行包而无需担心它在系统中的长期存在。

    使用 npm 全局安装包的示例:

    npm install -g typescript
    tsc --version
    

    使用 npx,无需全局安装:

    npx tsc --version
    
  3. 自动包处理

    使用 npx 时,它会自动检查该包是否在本地或全局存在,如果不存在,则临时下载并执行。这对运行一次性任务尤其有用。例如:

    npx cowsay "Hello, World!"
    

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

  4. 无需脚本的包可执行文件

    当使用 npm 运行在 package.json 脚本中定义的命令时,你需要写:

    npm run my-script
    

    而使用 npx,可以直接运行可执行命令:

    npx my-script
    

    这在脚本未明确定义在 package.json 中时尤其有用。

何时使用 NPM

  • 管理依赖:使用 npm 来安装、更新和删除项目依赖。
  • 运行项目特定的脚本:在 package.json 中定义并量身定制。
  • 管理包版本:锁定特定版本的库以保持项目一致性。

何时使用 NPX

  • 一次性包执行:使用 npx 运行你不想全局安装的包,例如仅使用一次的 CLI 工具。
  • 运行可执行文件:对于像 create-react-app 这样的命令,使用 npx 可以在不全局安装的情况下运行。
  • 测试不同版本:快速执行特定版本的工具,无需安装。

结论

npmnpx 都是 Node.js 生态系统中不可或缺的工具,尽管它们的用途不同。使用 npm 管理项目依赖,而使用 npx 执行包,而无需永久安装。这个小小的区别可以使你的工作流程更高效,节省时间并避免不必要的全局安装。

转载自:https://juejin.cn/post/7425932970592370714
评论
请登录