我刚刚开始学习React,Facebook通过提供以下现成的项目来帮助简化初始设置。
如果我必须安装骨架项目,我必须在命令行中键入npx create-react-app my-app
。
我想知道为什么Github中的Facebook有npx create-react-app my-app
而不是npm create-react-app my-app
?
NPX
与NPM
版本5.2+
捆绑在一起
npm
本身并不简单地运行任何包。事实上,它没有运行任何包。如果要使用NPM运行包,则必须在package.json
文件中指定该包。
当可执行文件通过NPM包安装时,NPM链接到它们:
./node_modules/.bin/
目录中创建的“链接”。bin/
目录(例如/usr/local/bin
)或Windows上的%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
将检查
是否存在于$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
npx是一个npm包运行器(x可能代表执行)。典型的用途是临时下载并运行一个包或用于试用。
create-react-app是一个npm包,在项目的生命周期中只运行一次。因此,最好使用npx在一个步骤中安装和运行它。
正如手册页https://www.npmjs.com/package/npx中提到的,默认情况下,npx可以在路径中或从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。
NPM是一个包管理器,您可以使用NPM安装node.js包
NPX是一个执行node.js包的工具。
无论您是在全局还是本地安装该软件包,都无关紧要。NPX将临时安装它并运行它。如果您配置了package.json文件并将其包含在脚本部分中,NPM也可以运行包。
所以请记住这一点,如果您想快速检查/运行一个节点包,而无需本地或全局安装,请使用NPX。
npM-经理
npx-execute-易于记忆