如果您曾经使用过Node.js,那么一定要使用npm。
npm(node package manager)是在安装Node.js时即可使用的依赖项。它为开发人员提供了一种在全局和局部安装packages的方法。
有时,您可能希望查看特定的package并尝试一些命令。但是,如果不在局部node_modules
文件夹中安装依赖项,就无法做到这一点。
npm
npm本身不会运行任何程序包。如果要使用npm运行package,则必须在package.json
文件中指定该package。
通过npm package安装可执行文件时,npm会创建指向它们的链接:
- local安装会在
./node_modules/.bin/
目录中创建link - global安装具有从全局
bin/
目录创建的链接(例如:Linux上为/usr/local/bin
或Windows上为%AppData%/npm
)
要使用npm执行package,您必须输入局部路径,如下所示:
./node_modules/.bin/your-package
或者您可以通过将其添加到scripts
部分的package.json
文件中来运行局部安装的package,如下所示:
{ "name": "your-application", "version": "1.0.0", "scripts": { "your-package": "your-package" } }
然后,您可以使用npm run运行脚本:
npm run your-package
您会看到,使用npm运行package需要花费很多时间。
幸运的是,npx诞生了。
npx
从npm 5.2.0版本开始,npx与npm预先捆绑在一起。
npx还是一个CLI工具,其目的是简化安装和管理npm注册表中托管的依赖项。现在,运行通常通过npm安装的任何基于Node.js的可执行文件都非常容易。您可以运行以下命令,以查看当前npm版本是否已安装该命令:
which npx
如果没有安装npx,则可以这样安装:
npm install -g npx
确定安装好之后,让我们看一些使npx变得非常有用的用例。
运行局部安装的package
如果要执行局部安装的package,只需输入:
npx your-package
npx将检查$PATH或局部项目二进制文件中是否存在<command>或<package>,如果存在,它将执行该命令。
执行以前未安装的package
另一个主要优点是能够执行以前未安装的程序包。
有时,您只想使用某些CLI工具,但不想只是为了进行测试而全局安装它们。
这意味着您可以节省一些磁盘空间,仅在需要它们时才运行它们。这也意味着您的全局变量将减少污染。例如:
npx create-react-app my-app
直接从GitHub运行代码
您可以使用npx运行任何GitHub gists和repositories。让我们集中精力执行GitHub gists,因为它更容易创建。
最基本的脚本由主JS文件和package.json
组成。设置完文件后,您所要做的就是运行带有该gists链接的npx。例如:
npx https://gist.github.com/Tynael/0861d31ea17796c9a5b4a0162eb3c1e8
测试不同的package版本
npx使测试Node.js包或模块的不同版本变得异常容易。为了测试该功能,我们将在局部安装create-react-app
package并测试即将发布的版本。这将在输出末尾附近列出一些dist标签。 Dist标签为版本号提供别名,这使得键入变得非常容易。
npm v create-react-app
让我们使用npx尝试create-react-app
的next
dist标签,该标签将在sandbox目录中创建该应用。
npx create-react-app@next sandbox
npx会临时安装next
版本的create-react-app
,然后执行以搭建该应用并安装其依赖项。
安装后,我们可以像这样导航到该应用程序:
cd sandbox
然后使用以下命令启动它:
npm start
现在,我们有了一个可以在next
版本的create-react-app
package上运行的应用程序!
npm vs npx — What’s the Difference?
Related Posts
- package.json中~和^之间的区别
- 如何升级Node.js版本(Linux, Ubuntu, macOS)
- 删除、弃用已发布在npmjs上的packages
- 查看npm安装的node模块版本
- Xcode Swift “Cannot find ‘MyClass’ in scope”
- Amazon S3 存储桶无法删除
- 关闭Sublime Text更新检查
- Device supports arm64-v8a, but APK only supports armeabi on device *
- npm ERR! gyp verb `which` failed Error: not found: python