原文:npm vs npx — What’s the Difference,作者:Carol-Theodor Pelu
如果你曾经使用过 Node.js,那么你肯定使用过 npm。
npm(node package manager)是你安装 Node.js 时开箱即用的依赖/包管理器。它为开发者提供了一种在全局和本地安装包的方法。
有时你可能想看一下特定的包,并尝试一些命令,但如果不在本地的 node_modules
文件夹中安装依赖项,你就无法做到这一点。
这就需要使用 npx。
在这篇文章中,我们将看看 npm 和 npx 的区别,并学习如何从两者中获得最佳效果。
首先,让我们了解一下 npm 到底是什么,以及我们能用它做什么。
这个视频作为补充资料。
软件包管理器 npm
npm 有几个功能。首先,它是一个用于发布开源 Node.js 项目的在线资源库。
其次,它是一个 CLI 工具,可以帮助你安装这些包并管理它们的版本和依赖关系。npm 上有几十万个 Node.js 库和应用程序,而且人们每天都会添加更多。
npm 本身并不运行任何软件包。如果你想使用 npm 运行一个包,你必须在 package.json
文件中指定这个包。
当可执行文件通过 npm 包安装时,npm 会创建链接指向它们。
- 本地安装的链接是在
./node_modules/.bin/
目录下创建的 - 全局安装会在全局
bin/
目录下创建链接(例如:Linux 上的/usr/local/bin
或 Windows 上的%AppData%/npm
)
要用 npm 执行一个包,你必须输入本地路径,像这样。
$ ./node_modules/.bin/your-package
或者你可以通过在脚本部分的 package.json
文件中添加一个本地安装的软件包来运行它,像这样:
{
"name": "your-application",
"version": "1.0.0",
"scripts": {
"your-package": "your-package"
}
}
然后你可以用 npm run
来运行这个脚本:
npm run your-package
你可以看到,用普通的 npm 运行一个包需要相当多的步骤。
幸运的是,这正是 npx 派上用场的地方。
npx 软件包运行器
自从 npm 5.2.0 版本以来,npx 就被预先捆绑在 npm 中,所以它现在几乎是一个标准。
npx 也是一个 CLI 工具,其目的是使安装和管理托管在 npm 注册表中的依赖关系变得容易。
现在,运行任何一种基于 Node.js 的可执行文件都非常容易,你通常会通过 npm 安装。
你可以运行以下命令,看看你当前的 npm 版本是否已经安装:
$ which npx
如果没有,你可以运行以下命令:
$ npm install -g npx
一旦你确定你已经安装了它,让我们看看使 npx 非常有用的一些使用场景。
轻松运行一个本地安装的软件包
如果你想执行一个本地安装的软件包,你只需要输入:
$ npx your-package
npx 将检查 <command>
或 <package>
是否存在于 $PATH
或本地项目的二进制文件中,如果存在,npx 将执行它。
执行以前没有安装的软件包
另一个主要优势是能够执行以前没有安装的软件包。
让我们通过运行来测试一下:
$ npx cowsay wow
这很了不起,因为有时你只是想使用一些 CLI 工具,但你不想为了测试它们而在全局安装它们。
这意味着你可以节省一些磁盘空间,只在需要时才运行它们。这也意味着你的全局变量将受到更少的污染。
直接从 GitHub 上运行代码
这个很厉害。
你可以用 npx 来运行任何 GitHub gist 和仓库。让我们专注于执行 GitHub 的 gist,因为创建一个 gist 更容易。
最基本的脚本由主 JS 文件和 package.json
组成。在你设置好这些文件后,你所要做的就是运行带有该 gist 链接的 npx,如上图所示。
你可以在这里找到我在这个例子中使用的代码。
确保你在执行任何脚本之前仔细阅读,以避免因恶意代码而发生的严重问题。
测试不同版本的包
npx 使测试一个 Node.js 包或模块的不同版本变得非常容易。为了测试这个很棒的功能,我们将在本地安装 create-react-app
包,并测试一个即将到来的版本。
这将在输出的最后列出一些 dist 标签。dist 标签提供了版本号的别名,这使得打字变得非常容易。
$ npm v create-react-app
让我们用 npx 来试试 reate-react-app
的 next
dist标签,它将在一个沙盒目录内创建应用程序。
$ npx create-react-app@next sandbox
npx 会暂时安装下一个版本的 create-react-app
,然后它就会执行,安装应用程序的依赖。
一旦安装完毕,我们就可以像这样导航到该应用程序:
$ cd sandbox
然后用这个命令启动它:
$ npm start
它将在你的默认浏览器窗口中自动打开 React 应用程序。现在我们有了一个在下一个版本的 create-react-app
包上运行的应用程序:
总结
npx 可以帮助我们避免版本问题、依赖问题和安装我们只是想尝试一下的不必要的软件包。
它还为执行软件包、命令、模块,甚至是 GitHub 的清单和仓库提供了一个清晰而简单的方法。
如果你以前没有使用过 npx,现在正是开始使用它的好时机。
这篇文章最初是在我的博客上发布的。