4

尝试将参数传递给npm带有lerna.

我有一个节点脚本,我想在工作区的每个包中运行它。lerna文档建议以下内容:

{
    "scripts": {
      "my-script": "lerna exec -- node \\$LERNA_ROOT_PATH/scripts/my-script.js"
    }
}

所以现在,如果我在根目录yarn run my-script下运行,它将在工作区的每个包中运行脚本。

有时,我需要将执行范围限定为特定的包。所以从命令行运行它显然有效:lerna exec --scope somepackage -- node \$LERNA_ROOT_PATH/scripts/create-common-scripts.js.

我的问题:如何将 npm 脚本与lerna范围参数连接起来。这不起作用:yarn run my-script --scope somepackage,因为它将参数设置为命令的末尾:lerna exec -- node \\$LERNA_ROOT_PATH/scripts/my-script.js --scope somepackage

谢谢!

4

1 回答 1

3

使用 Lerna 时,命令通常是嵌套的。这意味着一个命令将调用另一个命令等。例如以下命令:

npm run release (in monorepo root) [1] > lerna run release [2] > npm run release (in package) [3] > release-it [4]

在 shell 中,参数可以在运行时使用双破折号 ( --) 传递给嵌套命令。它标志着参数(选项)列表的结束。之后的任何参数--都将被提升到下一个命令。这将适用于嵌套多个级别的命令,您所要做的就是添加数量--以匹配您要将它们传递到的命令的级别。

考虑到前面的例子,下面的命令:

$ npm run release -- --stream -- -- --dry-run --no-git.requireCleanWorkingDir

将参数提升到:

1. npm run release
2. lerna run release --stream
3. npm run release
4. release-it --dry-run --no-git.requireCleanWorkingDir
于 2018-12-19T10:07:34.617 回答