如何将范围名称传递给 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 命令动态?的主要内容,如果未能解决你的问题,请参考以下文章
如何将使用 cidrsubnets 的子网的 CIDR 范围传递给 Terraform 版本 0.14 中的 VPC 模块