【问题标题】:What is colon : in npm script names?什么是冒号:在 npm 脚本名称中?
【发布时间】:2017-12-02 08:46:01
【问题描述】:

试图弄清楚在 npm 脚本名称中放入 : 的作用。例如:

package.json

"test:ci": "rest of script"

:ci 会做什么?运行 npm run test:ci 失败

我真的找不到任何 bash 语法。

【问题讨论】:

标签: javascript node.js bash shell


【解决方案1】:

我相信这只是将一组相关任务分组的命名约定。例如你可能有

"test:ci": ...
"test:units": ....
"test:integration"...

在这种情况下,它正在对一组相关的测试任务进行分组。

这将取决于包作者来指定。您可以像上面的答案中描述的那样拆分任务,然后使用一个“全局”test 命令来组合它们中的每一个,例如test:ci && test:unit && test:integration 使您能够一次运行它们,或者在需要时单独运行它们。

您可以使用npm-run-all (link) 并使用命令npm-run-all test:*,然后会找到所有以test: 组开头的脚本。

【讨论】:

  • 但它是如何分组的?它实际上在做什么?有什么好处?
  • @PositiveGuy 我已经用一些进一步的上下文/示例更新了原始答案。
  • 没有“上面的答案”。 :'(
【解决方案2】:

我通过运行解决了这个问题 - "npm run <scriptName>"

在我的package.json 文件中,我有两个“启动脚本”

start:nodemon server.js

start:elasticsearch:docker run elasticsearch..

npm run start:elasticsearch解决

【讨论】:

  • 为什么我可以调用 npm test 但要调用我的自定义测试脚本如 testHeadless 我必须调用 npm run testHeadless?
  • 究竟解决了什么问题?
  • @JesseBoyd 这只是 npm 开发人员采用的约定。可能会避免用户定义的脚本名称和预定义的 CLI 脚本之间的命名空间冲突(例如,定义名为“init”的脚本会在运行npm init 时导致歧义)。他们为某些常见的用户定义脚本添加了快捷方式,但不能为所有脚本一概而论。
【解决方案3】:

如果使用 Yarn 包管理器,您可以在名称中使用冒号从任何工作区调用脚本。

根据How to share scripts between workspaces? 上的纱线文档:

鲜为人知的 Yarn 功能:任何名称中带有冒号 (build:foo) 的脚本都可以从任何工作区调用。

另外,根据 CLI > run 上的 yarn 文档:

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

【讨论】:

  • 如何禁用共享脚本?
猜你喜欢
  • 2019-09-14
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2012-09-25
  • 2016-04-29
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多