ChatGPT解决这个技术问题 Extra ChatGPT

npx 和 npm 的区别?

我刚刚开始学习 React,Facebook 通过提供 following ready-made project 帮助简化了初始设置。

如果我必须安装骨架项目,我必须在命令行中输入 npx create-react-app my-app

我想知道为什么 Github 中的 Facebook 有 npx create-react-app my-app 而不是 npm create-react-app my-app

create-react-app 是一个生成器。 npx 进入 互联网,临时下载包以便执行它 (npx)。你得到(和想要)的是输出,它保存在本地,你运行命令的地方。
这篇文章通过示例 thecodeframework.com/… 解释了为什么使用 npx
这篇文章解释得很好。 section.io/engineering-education/npm-vs-npx

n
nCardot

介绍 npx:一个 npm 包运行器

NPM - 管理包,但执行起来并不容易。 NPX - 用于执行 Node 包的工具。

NPX 与 NPM 版本 5.2+ 捆绑在一起

NPM 本身并不简单地运行任何包。事实上,它不运行任何包。如果要使用 NPM 运行包,则必须在 package.json 文件中指定该包。

当通过 NPM 包安装可执行文件时,NPM 链接到它们:

本地安装在 ./node_modules/.bin/ 目录中创建了“链接”。全局安装具有从 Linux 上的全局 bin/ 目录(例如 /usr/local/bin)或 Windows 上的 %AppData%/npm 创建的“链接”。

Documentation you should read

新PM:

可能会在某个项目上本地安装一个包:

npm install some-package

现在假设您希望 NodeJS 从命令行执行该包:

$ some-package

以上将失败。只有全局安装的包才能通过键入它们的名称来执行。

要解决此问题并使其运行,您必须键入本地路径:

$ ./node_modules/.bin/some-package

您可以通过编辑 packages.json 文件并将该软件包添加到 scripts 部分来从技术上运行本地安装的软件包:

{
  "name": "whatever",
  "version": "1.0.0",
  "scripts": {
    "some-package": "some-package"
  }
}

然后使用 npm run-script(或 npm run)运行脚本:

npm run some-package

NP:

npx 将检查 $PATH 或本地项目二进制文件中是否存在 <command>,并执行它。因此,对于上面的示例,如果您希望执行本地安装的软件包 some-package,您只需键入:

npx some-package

npx 的另一个主要优势是能够执行以前未安装的包:

$ npx create-react-app my-app

上面的示例将在命令运行的路径生成一个react应用样板,并确保您始终使用最新版本的生成器或构建工具,而无需每次都升级重新使用它。

用例示例:

npx 命令在 package.json 文件的 script 部分可能会有所帮助,当不需要定义可能不常用或任何其他原因的依赖项时:

"scripts": {
    "start": "npx gulp@3.9.1",
    "serve": "npx http-server"
}

致电:npm run serve

相关问题:

如何使用本地安装在 node_modules 中的包? NPM:如何获取 ./node_modules/.bin 文件夹?如何使用 npm 脚本运行 js 文件?


所以 react 不使用 node.js,对吧?为什么它可以通过“npm”(节点包管理器)获得?
几年前,有 Bower 用于前端包管理,但它的使用急剧下降,取而代之的是 npm。在某些原因中,您可以只使用一个包管理器来处理与 javascript 相关的所有内容,也可以使用 commonjs 解决方案来开发前端项目。您可以查看 this response 了解更多详情。关于 react:不,它不直接使用 node,虽然你也可以在 node 中使用它! (例如:服务器端渲染)
@RecuencoJones - 你评论了我的答案而不是 OP
是的,我忘了提到@winklerrr,我正在处理他的评论
我认为最有用的功能是 NPX 在尚未安装软件包时安装它。否则将 ./node_modules/.bin 添加到您的 $PATH 并且不需要 NPX。
K
Karthick

npx 是一个 npm 包运行器(x 可能代表 eXecute)。使用 npx 的一种常见方法是临时下载并运行一个包或进行试用。

create-react-app 是一个 npm 包,预计在项目的生命周期中只运行一次。因此,最好使用 npx 一步安装和运行它。

如主页 https://www.npmjs.com/package/npx 所述,npx 默认可以在 PATH 或 node_modules/.bin 中运行命令。

注意: 经过一番挖掘,我们可以发现 create-react-app 指向一个 Javascript 文件(在 Linux 系统上可能指向 /usr/lib/node_modules/create-react-app/index.js)在节点环境中执行。这只是一个执行一些检查的全局工具。实际设置由 react-scripts 完成,其最新版本已安装在项目中。有关详细信息,请参阅 https://github.com/facebook/create-react-app


典型用途是运行已在本地或全局安装的版本,就像下载和运行包一样频繁。
c
cherankrish

NPM 是一个包管理器,你可以使用 NPM 安装 node.js 包

NPX 是一个执行 node.js 包的工具。

无论您是在全局还是本地安装该软件包都没有关系。 NPX 将临时安装并运行它。如果您配置 package.json 文件并将其包含在脚本部分中,NPM 也可以运行包。

所以请记住这一点,如果您想快速检查/运行节点包而不在本地或全局安装,请使用 NPX。

npM - 经理

npX - 执行 - 容易记住


您能否详细说明一下“暂时”。你的意思是执行命令后二进制文件被丢弃,强制 npx 每次重新下载二进制文件?
@JimAho 是的。 npx 每次都会重新下载包及其依赖项。如果性能是一个因素,您可能希望安装包并使用 npx 以外的其他东西执行它。 (例如:npm run my-package)
我认为“暂时”是指包的作者不希望用户知道包安装在哪里然后一次又一次地重新使用它,因为包可能需要在夜间升级......
“不管你是在全局还是本地安装了那个包,NPX都会临时安装并运行它。”我无法在 npx 6.14.11 上重现,例如在 npm install --save vaca;npx vaca 中,npx 不会重新下载:stackoverflow.com/questions/49302438/…
N
Ninh Pham

npm - JavaScript 包管理器,就像:pip (Python)、Maven (Java)、NuGet (.NET)、Composer (PHP)、RubyGems (红宝石),...

npx - 运行包的命令而不显式安装它。

用例:

您不想在全局或本地安装软件包。

您无权在全局范围内安装它。

只是想测试一些命令。

有时,您希望在 package.json 中有一个脚本命令(生成、转换某些内容……)来执行某些内容,而无需将这些包安装为项目的依赖项。

句法:

npx [options] [-p|--package <package>] <command> [command-arg]...

包是可选的:

npx   -p uglify-js         uglifyjs --output app.min.js app.js common.js
      +----------------+   +--------------------------------------------+
      package (optional)   command, followed by arguments

例如:

Start a HTTP Server      : npx http-server
Lint code                : npx eslint ./src
                         # Run uglifyjs command in the package uglify-js
Minify JS                : npx -p uglify-js uglifyjs -o app.min.js app.js common.js
Minify CSS               : npx clean-css-cli -o style.min.css css/bootstrap.css style.css
Minify HTML              : npx html-minifier index-2.html -o index.html --remove-comments --collapse-whitespace
Scan for open ports      : npx evilscan 192.168.1.10 --port=10-9999
Cast video to Chromecast : npx castnow http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4

关于 command 的更多信息:

https://docs.npmjs.com/files/package.json#bin

https://github.com/mishoo/UglifyJS2/blob/master/package.json#L17


n
nCardot

NP:

https://www.futurehosting.com/blog/npx-makes-life-easier-for-node-developers-plus-node-vulnerability-news/

Web 开发人员可以在他们的开发机器上拥有数十个项目,每个项目都有自己特定的一组 npm 安装的依赖项。几年前,处理 Grunt 或 Gulp 等 CLI 应用程序的通常建议是在每个项目中本地安装它们,也可以全局安装它们,以便可以轻松地从命令行运行它们。但是在全球范围内安装导致的问题与解决的问题一样多。项目可能依赖于不同版本的命令行工具,使用大量开发特定的 CLI 工具污染操作系统也不是很好。今天,大多数开发人员更喜欢在本地安装工具并保留它。本地版本的工具允许开发人员从 GitHub 拉取项目,而不必担心与全球安装的工具版本不兼容。 NPM 可以只安装本地版本,你就可以开始了。但是项目特定的安装并非没有问题:如何在不指定其在项目中的确切位置或使用别名的情况下运行正确版本的工具?这就是 npx 解决的问题。 NPM 5.2 中包含一个新工具,npx 是一个小型实用程序,它足够智能,可以在从项目中调用它时运行正确的应用程序。例如,如果你想运行本地版本的 mocha,你可以在项目中运行 npx mocha,它会按照你的期望运行。 npx 的一个有用的附带好处是它会自动安装尚未安装的 npm 包。因此,正如该工具的创建者 Kat Marchán 所指出的,您可以运行 npx benny-hill 而无需处理 Benny Hill 污染全球环境的问题。如果您想试用 npx,请更新到最新版本的 npm。


如果您使用的是 nvm-windows,您可能无法通过 npm 获得 npx,但需要手动安装! npm i -g npx
NPM can just install local versions - 不正确。 npm 可以安装全局,这是一种常见的做法。
可在此处找到对 NPX 的精彩介绍:medium.com/@maybekatz/…,作者:Kat Marchán。
@vsync 我相信这应该被解释为“NPM 可以简单地安装本地版本,你很高兴。”而不是暗示限制。
Y
Yassine Qoraiche

简单定义:

npm - Javascript 包管理器

npx - 执行 npm 包二进制文件


R
Risteard

这是 NPX 的一个示例:npx cowsay hello

如果你在你的 bash 终端中输入它,你会看到结果。这样做的好处是 npx 已经临时安装了 cowsay。由于没有永久安装cowsay,因此没有包装污染。这对于您想要避免包装污染的一次性包装非常有用。

正如其他答案中提到的,npx 在需要安装(使用 npm)包然后在运行之前进行配置的情况下也非常有用。例如,不要使用 npm 安装然后配置 json.package 文件,然后调用配置的运行命令,只需使用 npx 代替。一个真实的例子:npx create-react-app my-app


它在哪里安装它,它是在命令完成后将其删除,还是将其缓存一段时间,或者始终检查您是否拥有最新版本的软件包?
@redOctober13 有一些缓存,但 npx 也每次都向 npm 注册表询问最新版本,因此缓存对速度没有太大帮助。它每次都会扩展然后清理依赖项。
C
Chris

NPM => 是一个 JS 包管理器。

NPX => 是一个执行 Node 包和执行 npm 包二进制文件的工具。

很容易记住:

-npm 代表经理

-npx 代表执行


M
Midhun Pottammal

NPM:NPM 代表 Node Package Manager,是 Node.js 的默认包管理器。它由 Isaac Z. Schlueter 开发,最初于 2010 年 1 月 12 日发布。它完全用 JavaScript 编写。它由一个命令行客户端 npm 组成,它管理所有 node.js 包和模块。安装 node.js 时,它包含在安装中。

npm run your-package-name

NPX 是一个用来执行包的工具。

NPX 是 Node Package Execute 的缩写 NPX 包是 npm 自带的,所以当你在 5.2.0 以上安装 npm 时,会自动安装 NPX。

它是一个 npm 包运行程序,可以从 npm 注册表执行您想要的任何包,甚至无需安装该包。 npx 在单次使用包中很有用。如果你安装了低于 5.2.0 的 npm,那么你的系统中没有安装 npx。

运行以下命令以确定是否安装了 npx:

npx -v

如果未安装 npx,则可以运行以下命令。

npm install -g npx

使用 npx 执行包:

npx your-package-name

https://i.stack.imgur.com/TXGoT.png


佚名

最简单的定义:

NPX

npx 代表 Node Package Execute,它与 npm 一起提供,当您安装 npm 以上 5.2.0 版本时,将自动安装 npx。它是一个 npm 包运行程序,可以从 npm 注册表执行您想要的任何包,甚至无需安装该包。

新PM

npm 是由 npm, Inc 维护的 JavaScript 编程语言的包管理器。npm 是 JavaScript 运行时环境 Node.js 的默认包管理器。它由一个命令行客户端(也称为 npm)和一个公共和付费私人包的在线数据库组成


S
Shanu Raj

简单的答案就像

NPX:用于执行任何节点包,无需在我们的机器上安装包。

NPM:用于在我们的机器上安装任何 node js 包。当我们使用 NPM 安装任何包时,我们可以使用 "require("package-name')"。但是当我们使用 NPX 时,我们不能导入包。

示例:您应该运行 npm i axios 在这种情况下,您正在本地机器上安装 axios 包

和 npx create-react-app 'app-name' 在这里你直接在你的机器上执行 create-react-app 包而不安装它的文件。


S
Sunil Yadav

NPM 代表节点包管理器。它预装了 Node.js。 NPM 有助于将项目中的包作为依赖项进行管理。

使用 NPM 时,有两种方法可以将包安装到本地计算机。

本地:本地安装包时,安装在本地项目目录的 ./node_modules/.bin/ 中。全局:在用户环境路径中安装一个全局包。 /usr/local/bin 用于 Linux 和 AppData%/npm 用于 Windows。

要执行本地安装的包,应该在 package.json 脚本块中指定它,如下所示。

"scripts": {
    "your-package":  "your-package-name"
}

然后,您可以使用以下命令执行包:

npm run your-package-name

NPX 是一个 NPM 包执行器。目前,当您安装 NPM 5.2.0 或更高版本时,NPX 与 NPM 捆绑在一起。

为什么 NPX 优于 NPM?

无需使用 node_modules 路径编辑 package.json 文件。

您可以直接从命令行执行该工具。


A
Ashim

NPM和NPX的区别如下:

i) NPM 用于安装包,而 NPX 用于执行包。

ii) 由于 npm,安装的包必须得到照顾,因为它是全局安装的,而 npx 使用的包不需要照顾,因为它们不是全局安装的。


A
Ahad

NPX 是用于在新项目中创建和执行某些功能的工具 NPM 是包含所有库的包管理器


您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center
C
Charney Kaye

下面是使用 npx 创建应用程序的示例

npx create-react-app 项目名称 --template all


S
Sajol

简单地说,npm 是节点包管理器,npx 是运行 npm 包的可执行版本


s
shariful islam

npm 是用于安装包的工具,npx 是用于执行包的工具。 npm - 如果您希望通过 npm 运行包,那么您必须在 package.json 中指定该包并在本地安装它。 npx-A 包可以在不安装包的情况下执行。它是一个 npm 包运行器,因此如果尚未安装任何包,它将自动安装它们。


M
Mamuntufayel

另一方面,npm 是包管理器或安装程序 npx 使用的包不是全局安装的,因此您必须长期无忧无虑地污染。


N
Nshimiye Emmy

实际上,我尝试了很多方法来解决这个问题,但都失败了,但最终全局删除/删除纱线解决了这个问题

只需在命令行终端中键入此命令:

npm 卸载 -g 纱线

然后运行下面的命令来安装 react starter 项目

npx 创建反应应用程序