npm 和 npx的区别

本文详细介绍了npm和npx的功能与使用方法。npm作为Node.js的默认包管理器,用于安装和管理依赖;而npx则简化了运行包的过程,无需安装即可直接执行,方便测试和临时使用。此外,npx还支持测试不同版本的包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

npm(the package manager)

npm(node package manager)是在安装node .js时开箱即用的依赖/包管理器。它为开发人员提供了一种在全局(globally)本地(locally)安装包的方法。有时您可能想查看一个特定的包并尝试一些命令。但如果不在本地node_modules文件夹中安装依赖项,就无法做到这一点。

npx为此而诞生了。

在本文中,我们将了解 npm 和 npx 之间的区别,并学会如何充分利用两者优势。

NPM需知:

首先,它是发布开源Node.js项目的在线存储库。其次,它是一个CLI工具,可以帮助您安装这些包并管理它们的版本和依赖关系。npm上有成千上万的Node.js库和应用程序,而且每天都有更多的Node.js库和应用程序添加进来。npm本身不运行任何包。如果你想使用npm运行一个包,你必须在你的项目根路径中指定那个package.json文件。

当可执行程序通过npm包安装时,npm会创建到它们的链接:

  • 本地安装(local)是在 ./node_modules/.bin/ 目录创建链接。
  • 全局安装(global)有从全局 bin/ 目录创建的链接(例如:Linux上的/usr/local/bin,Windows上的%AppData%/npm)。

要用npm执行一个包,你要么必须输入本地路径,像这样:

$ ./node_modules/.bin/your-package

也可以通过将本地安装的包在package.json文件中进行配置来运行,在script字段添加如下内容:

{
  "name": "your-application",
  "version": "1.0.0",
  "scripts": {
    "your-package": "your-package"
  }
}

然后你可以使用npm run运行这个脚本:

npm run your-package

从上面可以看到,使用普通的npm运行一个包需要相当多的仪式。
幸运的是,这就是npx派上用场的地方。

NPX包运行器(the package runner)

由于npm 5.2.0版本的npx预先绑定在npm中,所以这是现在的一种标准。npx也是一个CLI工具,它的目的是让安装和管理托管在npm注册表中的依赖更容易。现在可以很容易地运行任何基于Node.js的可执行文件,而你通常会通过npm安装这些文件。

你可以运行以下命令查看当前npm版本是否已经安装了npx:

$ which npx

如果没有,你可以像这样全局安装:

$ npm install -g npx

确保安装了npx之后,让我们来看几个使用npx的案例。

轻松运行本地安装的包

如果你想执行一个本地安装的包,你只需要输入:

$ npx your-package

npx将检查$PATH或本地项目二进制文件中是否存在<command>或<package>,如果存在,将执行它。

执行以前没有安装的包

这是一个主要优点,能够执行以前没有安装的包。

让我们运行以下命令进行测试:

$ npx cowsay wow

这个功能非常棒,因为有时您只是想使用一些CLI工具,但不希望只为了测试而全局安装它们。
这意味着您可以节省一些磁盘空间,只在需要时运行它们。同时全局环境变量将较少受到污染。

测试不同的包版本

npx使测试Node.js包或模块的不同版本变得非常容易。为了测试这个功能,我们将在本地安装create-react-app包并测试即将推出的版本。


这将在输出的末尾列出一些dist标记。Dist标签提供了版本号的别名,这使得输入更容易。

$ npm v create-react-app

 

使用npx来尝试安装create-react-app中一个dist-tags版本,它将在sandbox目录中创建应用程序。

$ npx create-react-app@next sandbox

npx将临时安装next版本的create-react-app,然后将执行脚手架应用程序并安装它的依赖项。

一旦安装成功,我们导航至项目目录里:

$ cd sandbox

 然后用下面的命令运行:

$ npm start

之后它会在你默认的浏览器窗口中自动打开React应用。

                                                       React应用程序的首页

总结

npx帮助我们避免版本控制、依赖关系问题和安装我们只是想尝试的不必要的包。
它还提供了一种清晰而简单的方式来执行包、命令、模块,甚至GitHub向导和存储库。
 

参考:https://www.freecodecamp.org/news/npm-vs-npx-whats-the-difference/

### NPMNPX的关系及区别 #### 基本概念 NPM(Node Package Manager)是一个用于管理分发JavaScript库应用程序的工具。它是Node.js的一部分,在安装Node.js时自动附带[^4]。NPM允许开发者在全球范围内或项目本地安装依赖项。 NPX(Node Package Execute)是一种CLI工具,旨在简化运行临时脚本的过程。自npm 5.2.0起,NPX已作为内置功能集成到NPM中[^1]。其主要目标是让用户能够快速执行某些命令,而无需显式地将相关包安装到`node_modules`目录中。 --- #### 使用场景对比 - **NPM的主要用途** - 安装、卸载以及管理项目的依赖关系。 - 提供了一个存储库来查找第三方模块。 - 支持构建自动化流程所需的脚手架工具。 示例代码展示如何利用npm进行操作: ```bash npm init # 初始化一个新的package.json文件 npm install express --save # 将express框架添加至当前工程并记录于dependencies字段下 ``` - **NPX的功能扩展** - 运行一次性任务或者测试某个新发布的库是否满足需求前先体验一番效果再决定要不要正式引入进来成为长期使用的组件之一。 - 对那些仅需偶尔调用几次而非频繁使用的程序来说特别有用,比如创建React应用实例:`npx create-react-app myapp`. 下面给出一段简单的例子说明怎样借助npx完成工作而不必事先把对应的软件加入环境变量路径里去: ```bash npx eslint yourfile.js # 不需要提前全局安装eslint即可对其它人的代码做静态分析检测潜在错误隐患 ``` --- #### 技术实现层面的不同点 | 特性 | NPM | NPX | |--------------------|--------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------| | 主要作用 | 长期维护项目结构,处理各种复杂的相互关联情况 | 即刻响应简单请求 | | 是否保留副本 | 是 | 否 (除非明确指定保存选项) | | 执行效率 | 较低 | 更高效 | 具体而言: - 当通过 `npm run-script <command>` 来触发定义好的生命周期钩子函数的时候,实际上背后还是依靠shell解析器去找寻对应的实际可执行档位位置然后再加载起来运作;相比之下,直接采用 `npx some-command-name` 形式的语法则显得更为简洁明快[^4]。 另外值得注意的一件事就是关于版本控制方面也有差异存在——假如说同一个机器上面同时存在着不同版本号之间的冲突矛盾现象的话,那么单纯依靠传统的办法很难彻底解决这个问题,这时候就可以考虑运用pnpm之类的替代方案了[^3]。 --- ### 总结陈词 综上所述可以看出虽然两者之间确实存在一定联系但也各自具备独特的优势所在因此在实际开发过程中应当根据具体情况灵活选用合适的手段才能达到事半功倍的效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值