yarn run 和 npm start 有什么区别?

78

yarn run的意图是否等同于npm start


让事情更加混乱的是,yarn start == yarn run start。 - killjoy
4个回答

88

看起来 yarn run start 相当于 npm start,它会运行package.json文件中 script 字段下的 start 脚本。


13
yarn start 命令会执行 package.json 文件中的 start 脚本。 - Qwerty

66
要了解的几件事情:
npm: 运行命令是执行用户定义脚本所必需的。
yarn: 运行命令不是执行用户定义脚本所必需的。
start 命令不是用户定义的脚本名称,因此您可能不需要指定运行命令来执行它。
因此,所有以下命令都类似:
- npm start - npm run start - yarn start - yarn run start
如果您有一个名为 "app" 的用户定义脚本:
- npm app (无效!) - npm run app (有效!) - yarn app (有效!) - yarn run app (有效!)
注意:默认情况下,如果未明确定义,则启动将运行 node server.js。

你所指定的默认行为是具有误导性的。 - snehanshu.js
默认行为也在文档中类似地提到了 https://docs.npmjs.com/cli/start.html - Chandrashekhar Naik
runyarn run中不是必需的,除非脚本名称与yarn子命令相同(例如,“run”需要yarn run run,这很奇怪,可能应该避免)。 - Kevin

19

npm startnpm run start 的简写。

现在从 package.json 运行脚本的角度来看,以下所有命令都是等效的:

npm run start
npm start
yarn run start
yarn start

npm run myscript
npm myscript 这是一个错误
yarn run myscript
yarn myscript

这是因为对于yarn而言,run 不是必要的命令,但对于npm而言是必要的。


Bonus

npr start - OK
npr myscript - OK

此文件 放在 PATH 中的某个位置,例如 %localappdata%\Programs\Git\cmd

npr.cmd
npm run %*

0

yarn runnpm run 类似,它们可以用于运行 package.json 中的脚本。

对于 npm,在运行 npm 生命周期脚本(teststartrestartstop)时,可以省略 run,但这些脚本可能会产生额外的效果。例如,如果 "scripts" 对象在 package.json 中未定义 "start" 属性,则 npm start 将运行 node server.js。请参阅文档 npm run您不能省略其他名称的脚本中的 run

对于 yarn,您可以省略 package.json 中所有脚本的 run,但如果您的脚本名称与 yarn 内置的 cli 命令相同,内置的 cli 命令将优先于您的脚本。请参阅文档 yarn run

因此,在 package.json 中运行脚本的最佳方式是:永远不要省略 run


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接