如何将范围名称传递给 lerna 命令动态?

Posted

技术标签:

【中文标题】如何将范围名称传递给 lerna 命令动态?【英文标题】:How to pass scope name to lerna command dynamic? 【发布时间】:2021-02-12 14:24:46 【问题描述】:

我使用 lerna 来管理项目,dev 命令存在于某些项目中。 例如,A 和 B 有命令dev 来启动项目。 我必须在根项目中编写两个命令:


 "dev:A":"lerna exec --scope A -- yarn dev",
 "dev:B":"lerna exec --scope B -- yarn dev"

反正就是这样运行的:

yarn dev A

我尝试过,但失败了。范围名称是传递给 yarn dev 而不是 lerna。


 "dev":"lerna exec --scope $1 -- yarn dev",

【问题讨论】:

【参考方案1】:

可执行文件不是yarn,而是lerna。你想要的命令是

lerna run dev --scope xyz

所以要么全局安装它并像这样调用它,要么将它安装为项目依赖项然后

yarn lerna -- run dev --scope ...
# or 
`npm run lerna -- run dev --scope ...`

或使用npx lerna run dev --scope ... 在不显式安装的情况下全局运行它。

为什么会这样?

因为yarn <bin>/npm run <bin> 执行 bin 就像您直接调用它一样,而 -- 将 yarn/npm 的参数与您调用的 bin 的参数分开。更新的纱线将允许您删除 -- 并自动找出它们。

我不确定您是否真的需要在脚本的 lerna 部分中使用 yarn dev 而不是简单地使用 dev,就像 lerna 所做的那样——遍历所有项目,查找是否有任何项目有 @ 987654330@ 脚本并执行它(如果你使用--scope,它当然只会查找给定的项目......)。您可能需要使用 yarn less 它使用 npm 调用子包中的命令,但我没有检查,因为我们公司使用 npm。

一个 package.json 包括


  "scripts":  "dev": "lerna run dev --scope x" 

如果你用yarn dev 启动它会做同样的事情。

如果你想用更多参数调用 lerna-dev 脚本,你总是可以在终端中使用yarn dev -- --include-dependencies,这会将dev之后的所有参数附加到lerna而不是yarn,在这个例子中导致在yarn lerna -- dev --scope x --include-dependencies

【讨论】:

【参考方案2】:

算了。 我看到 answer 和命令 "lerna exec 'yarn dev' --scope" 有效。

【讨论】:

以上是关于如何将范围名称传递给 lerna 命令动态?的主要内容,如果未能解决你的问题,请参考以下文章

用 Jest 模拟 Lerna 范围模块

Codeigniter 站点范围的视图

将 SQL 输入日期范围传递给 SHINY 中的查询

如何将指令的范围值作为$ scope传递给控制器

如何将使用 cidrsubnets 的子网的 CIDR 范围传递给 Terraform 版本 0.14 中的 VPC 模块

将范围传递给回调函数/绑定