[译] 是的,它是 npx,不是 npm

482 阅读2分钟


原文: Yes, it’s npx, not npm — the difference explained


最近,当我开始学习 React 的时,看到包括我在内的很多人当看到 npx 而不是 npm 时很困惑。

一些人看的了感觉很奇怪,但也没想太多。另一些人认为可能是拼写错误了,就用 npm 而不是 npx 直接运行。

当我看到这种事情发生了很多次后,我觉得值得写篇文章来说道说道。

它不是拼写错误,它是 npx,不是 npm !:)


NPM

众所周知,npm 就是 Node.js 包管理器,它的职责就是包管理和处理它们的依赖关系。

我们可以在 package.json 文件中指定项目中的所有依赖(包),这样所有人随时都能通过 npm install 命令来安装所有的依赖。

它也提供了版本控制,例如:可以为项目指定某个版本的依赖,这样可以避免因为版本升级对我们项目造成意料之外的风险。

NPX

npx 是用来 执行 Node 包的工具 并在 npm5.2 版本与 npm 捆绑在一起。

npx 做了什么?

  1. 默认情况下,它先去检查包是否存在(会在本地项目的 node_modules/.bin 和环境变量 $PATH寻找)
  2. 如果存在,执行它
  3. 如果不存在,则会先安装(临时)再运行

以上列出的是它的默认行为,当然可以通过参数来阻止。

例如:运行 npx some-package --no-install 就告诉 npx 只运行 some-packag 包,如果不存在也不要安装。

更多的 npx 参数在这里查看


例子

如果我们有一个包名 my-package,我们想运行它。

如果不用 npx,要运行一个包就要通过包的路径来执行。

./node_modules/bin/my-package

或者在 package.jsonscripts 里编写脚本。

{
  "name": "something",
  "version": "1.0.0",
  "scripts": {
    "my-package": "./node_modules/bin/my-package"
  }
}

然后通过 npm run my-package 命令运行。

现在通过 npx 只需 npx my-package 命令就能轻松搞定。

结论

npx != npm


「极客阅读 」汇聚了国内外最优质的技术博客、产品动态、公众号文章。开发者可以在极客阅读一站式的阅读到来自互联网技术大咖的文章。

「极客阅读 」官网:geeker-read.com