npm指令加run?不加run?

801 阅读2分钟

嘿!掘友们!今天我发现了很有趣的问题,为什么我们在使用npm指令时加run?

我来讲讲是怎么肥事。

自定义脚本指令

首先要清楚,npm 可以执行在项目中的 package.json 内自定义脚本命令

{
  // 自定义脚本命令
  "scripts": {
    "start": "node index.js",
    "echo": "echo \"test\"",
    "dev": "vite",
    "serve": "vue-cli-service serve"
  }
}

npm run 原理

在使用 npm run <scriptName> 指令时会创建一个 shell, 然后在shell中执行指令。

这样我们就大致清楚了,说到这里大概就知道怎么回事了。

区别

在不使用 run 时,一般我们写的脚本都是可以直接在 终端(terminal) 执行的。

而使用run的原因是因为 我们写的脚本不能直接在 终端(terminal) 执行,需要找到脚本命令中的依赖名后重新编译后才运行shell脚本。

比如上面的 serve 命令,我们的终端没有 vite 指令,不能直接使用npm serve命令。

所以运行上面脚本指令,应该是这样的:

  • start -> npm start && npm run start

  • echo -> npm echo && npm run echo

  • dev -> npm run dev

  • serve -> npm run serve

yarn

Yarn 就比较牛了,它加不加run都一样。

  • 如果scripts本地 package.json 中的字段包含匹配的脚本名称,则将执行其定义。

  • 否则,如果本地工作空间的依赖项之一公开了具有匹配名称的二进制文件,则该二进制文件将被执行。

  • 否则,如果指定的名称包含冒号字符,并且项目中的工作区之一恰好包含一个具有匹配名称的脚本,则该脚本将被执行。


你懂了吗?

我是一个满脑子奇怪知识的小商同学,在校ing,懂点设计,懂点排版,为成为一名优秀的前端工程师而努力。