npx和npm之间的区别?

时间:2018-05-30 12:51:54

标签: javascript npm

我刚开始学习React,facebook通过提供以下现成项目帮助简化初始设置 链接到Github上的Facebook帐户:https://github.com/facebook/create-react-app
如果我必须安装骨架项目,我必须在命令行中键入npx create-react-app my-app 我想知道为什么Github中的facebook帐户有npx create-react-app my-app而不是npm create-react-app my-app

11 个答案:

答案 0 :(得分:239)

Introducing npx: an npm package runner

NPM-管理程序包,但是并没有使执行 execute 变得容易。
{{1} }-用于执行节点程序包的工具。

  

NPXNPX版本NPM捆绑在一起

5.2+本身并不能简单地运行任何软件包。事实上,它不会运行任何程序包。如果要使用NPM运行软件包,则必须在NPM文件中指定该软件包。

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

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

Documentation you should read


NPM:

一个人可能会在某个项目的本地安装软件包:

%AppData%/npm

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

npm install some-package

以上内容将失败。只能通过输入的名称来执行全局安装的程序包。

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

$ some-package

您可以通过编辑$ ./node_modules/.bin/some-package 文件并将其添加到packages.json部分中来技术上运行本地安装的软件包:

scripts

然后使用npm run-script(或{ "name": "whatever", "version": "1.0.0", "scripts": { "some-package": "some-package" } } )运行脚本:

npm run

NPX:

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

some-package

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

npx

上面的示例将在命令运行的路径内 中生成$ npx create-react-app my-app 应用样板,并确保您始终使用最新版本的生成器或构建工具,而不必每次使用时都要升级。


相关问题:

  1. How to use package installed locally in node_modules?
  2. NPM: how to source ./node_modules/.bin folder?
  3. How do you run a js file using npm scripts?

答案 1 :(得分:37)

npx 是npm软件包运行器(x可能代表eXecute)。通常的用途是临时下载或运行程序包或进行试用。

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

答案 2 :(得分:33)

NPX:

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

  

Web开发人员可以在其开发中拥有数十个项目   机器,并且每个项目都有自己特定的npm安装集   依赖性。几年前,有关CLI的通常建议   诸如Grunt或Gulp之类的应用程序是将它们分别安装在本地   项目以及全球范围内,以便可以从命令轻松运行它们   线。

     

但是在全球范围内安装会导致解决的问题。专案   可能取决于命令行工具的不同版本,并且污染   具有许多特定于开发的CLI工具的操作系统不是   太好了。如今,大多数开发人员更喜欢在本地安装工具   并留在那里。

     

工具的本地版本允许开发人员从GitHub提取项目   不用担心与全局安装不兼容   版本的工具。 NPM只能安装本地版本,   去。但是,针对特定项目的安装并非没有   问题:如何在没有工具的情况下运行正确版本的工具   指定其在项目中的确切位置或在其中玩耍   别名?

     

这就是npx解决的问题。 NPM 5.2中包含的新工具npx是   一个小工具,足够聪明,可以在运行时运行正确的应用程序   是从项目内部调用的。

     

例如,如果您要运行摩卡项目的本地版本,   您可以在项目内运行npx mocha,它将执行您的操作   期待。

     

npx的一个有用的附带好处是它将自动安装npm   尚未安装的软件包。因此,作为工具的创建者Kat   Marchán指出,您无需处理即可运行npx benny-hill   本尼·希尔(Benny Hill)污染了全球环境。

     

如果要旋转npx,请更新到最新版本   的npm。

答案 3 :(得分:24)

npx在不显式安装的情况下运行软件包的命令。

用例:

  • 您既不想在本地也不能在本地安装软件包。
  • 您无权在全球进行安装。
  • 只想测试一些命令。

语法:

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的更多信息:

答案 4 :(得分:11)

简单定义:

npm -Javascript程序包管理器

npx -执行npm软件包二进制文件

答案 5 :(得分:4)

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

NPX是执行node.js软件包的工具。

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

  

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

答案 6 :(得分:3)

以下是NPX的示例:npx cowsay你好

如果将其输入到bash终端中,您将看到结果。这样做的好处是npx已临时安装了Cowsay。由于Cowsay未永久安装,因此没有包装污染。这非常适合想要避免包装污染的一次性包装。

如其他答案中所述,在需要使用npm安装软件包并在运行之前对其进行配置的情况下,npx也非常有用。例如。而不是使用npm来安装然后配置json.package文件,然后调用已配置的run命令,而只需使用npx即可。一个真实的例子: npx create-react-app my-app

答案 7 :(得分:1)

最简单的定义:

NPX

<块引用>

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

NPM

<块引用>

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

答案 8 :(得分:0)

以下是使用 npx

创建应用程序的示例 <块引用>

npx create-react-app project-name --template all

答案 9 :(得分:0)

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

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

<块引用>

npm uninstall -g yarn

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

<块引用>

npx create-react-app

答案 10 :(得分:-1)

如果使用 npm 5.1或更早版本,则不能使用npx。相反,请全局安装create-react-app:

npm install -g create-react-app

现在您可以运行:

create-react-app my-app