【问题标题】:Difference between npx and npm?npx 和 npm 的区别?
【发布时间】:2018-11-09 08:10:25
【问题描述】:

我刚刚开始学习 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?

【问题讨论】:

标签: javascript reactjs npm npx


【解决方案1】:

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

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

很容易记住:

-npm代表MANAGER

-npx 代表 EXECUTE

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      【解决方案3】:

      最简单的定义:

      NPX

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

      NPM

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

      【讨论】:

        【解决方案4】:

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

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

        npm 卸载 -g yarn

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

        npx create-react-app

        【讨论】:

          【解决方案5】:

          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。

          【讨论】:

          • 典型的用法是运行本地或全局已安装的版本,就像下载和运行一个包一样。
          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

            Introducing npx: an npm package runner

            NPM - 管理包但不会让生活变得容易执行任何。
            NPX - 的工具正在执行节点包。

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

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

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

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

            Documentation you should read


            NPM:

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

            npm install some-package
            

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

            $ some-package
            

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

            要解决这个问题并让它运行,您必须输入本地路径:

            $ ./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 命令可能对package.json 文件的script 部分有所帮助, 当不需要定义可能不常用或任何其他原因的依赖项时:

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

            致电:npm run serve


            相关问题:

            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?

            【讨论】:

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

            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:

            【讨论】:

              【解决方案9】:

              简单定义:

              npm - Javascript 包管理器

              npx - 执行 npm 包二进制文件

              【讨论】:

                【解决方案10】:

                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/…
                【解决方案11】:

                下面是 NPX 的示例:npx cowsay hello

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

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

                【讨论】:

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

                NPX:

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

                Web 开发人员可以在他们的开发中拥有数十个项目 机器,并且每个项目都有自己特定的一组 npm-installed 依赖关系。几年前,处理 CLI 的常用建议 像 Grunt 或 Gulp 这样的应用程序是在每个本地安装它们 项目和全局,因此它们可以很容易地从命令运行 行。

                但是全局安装导致的问题与解决的问题一样多。项目 可能依赖于不同版本的命令行工具,并且污染 具有许多特定于开发的 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 可以简单地安装本地版本,你就可以开始了。”而不是暗示限制。
                猜你喜欢
                • 2022-09-30
                • 2020-03-26
                • 2015-12-16
                • 2018-12-23
                • 1970-01-01
                • 1970-01-01
                • 2020-11-17
                • 1970-01-01
                • 2017-10-22
                相关资源
                最近更新 更多