npx 和 npm 的区别?

IT技术 javascript reactjs npm npx
2021-01-25 11:39:49

我刚开始学习 React,Facebook 通过提供以下现成的项目来帮助简化初始设置

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

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

6个回答

介绍 npx:一个 npm 包运行器

NPM-管理包,不会让执行任何变得容易
NPX- 用于执行Node 包的工具

NPXNPM版本捆绑5.2+

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

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

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

您应该阅读的文档


新产品管理:

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

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

NPX:

npx将检查是否<command>存在于$PATH,或在本地项目二进制文件中,并执行它。所以,对于上面的例子,如果你想执行本地安装的包,some-package你需要做的就是输入:

npx some-package

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

$ npx create-react-app my-app

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


用例示例:

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

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

致电: npm run serve


相关问题:

  1. 如何使用本地安装在 node_modules 中的包?
  2. NPM:如何获取 ./node_modules/.bin 文件夹?
  3. 如何使用 npm 脚本运行 js 文件?
所以 react 没有用node.js,对吧?为什么它可以通过“npm”(节点包管理器)获得?
2021-03-24 11:39:49
@RecuencoJones - 你评论了我的回答而不是 OP
2021-03-28 11:39:49
是的,我忘了提及@winklerrr,我正在处理他的评论
2021-04-01 11:39:49
几年前,有用于前端包管理的Bower,但它的使用急剧下降,有利于 npm。在某些原因中,您可以只对与 javascript 相关的所有内容使用单个包管理器,也可以使用 commonjs 解决方案来开发前端项目。您可以查看此回复以获取更多详细信息。关于 react:不,它不直接使用 node,虽然你也可以在 node 中使用它!(例如:服务器端渲染)
2021-04-02 11:39:49
我认为最有用的功能是在尚未安装包时安装 NPX。否则添加./node_modules/.bin到您的 $PATH 并且不需要 NPX。
2021-04-10 11:39:49

npx是一个 npm 包运行程序(x 可能代表 eXecute)。典型用途是临时下载和运行包或用于试用。

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

在主页提到https://www.npmjs.com/package/npxNPX可以运行路径或从node_modules / .bin文件默认情况下的命令。

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

典型的用途是运行已在本地或全局安装的版本,就像下载和运行包一样。
2021-04-09 11:39:49

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

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

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

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

np M - 经理

np X - 执行 - 好记

@JimAho 是的。npx 每次都会重新下载包及其依赖项。如果性能是一个因素,您可能想要安装包并使用 npx 以外的其他东西执行它。(例如:npm run my-package)
2021-03-23 11:39:49
我认为“临时”是指包的作者不希望用户知道包的安装位置然后一次又一次地重新使用它,因为包可能需要在夜间升级......
2021-03-30 11:39:49
您能否详细说明一下“暂时”。你的意思是二进制文件在执行命令后被丢弃,迫使 npx每次重新下载二进制文件
2021-04-04 11:39:49
“无论您是全局安装还是本地安装该软件包都没有关系。NPX 将暂时安装并运行它。” 我无法在npx6.14.11 上重现,例如npm install --save vaca;npx vacanpx不会重新下载:stackoverflow.com/questions/49302438/...
2021-04-04 11:39:49

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

NPX:

来自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。

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