使用 lerna 将自定义参数发送到 npm (yarn) 脚本

Ozz*_*123 4 npm lerna npm-scripts yarnpkg

npm我在尝试使用 向脚本传递参数时遇到问题lerna

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

{
    "scripts": {
      "my-script": "lerna exec -- node \\$LERNA_ROOT_PATH/scripts/my-script.js"
    }
}
Run Code Online (Sandbox Code Playgroud)

所以现在,如果我在根目录中运行,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

谢谢!

nid*_*kil 5

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

npm run release (in monorepo root) [1] > lerna run release [2] > npm run release (in package) [3] > release-it [4]
Run Code Online (Sandbox Code Playgroud)

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

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

$ npm run release -- --stream -- -- --dry-run --no-git.requireCleanWorkingDir
Run Code Online (Sandbox Code Playgroud)

将提升参数至:

1. npm run release
2. lerna run release --stream
3. npm run release
4. release-it --dry-run --no-git.requireCleanWorkingDir
Run Code Online (Sandbox Code Playgroud)