【问题标题】:sending custom arguments to npm (yarn) scripts with lerna使用 lerna 向 npm (yarn) 脚本发送自定义参数
【发布时间】:2018-06-20 12:46:04
【问题描述】:

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

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

{
    "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

谢谢!

【问题讨论】:

    标签: npm yarnpkg npm-scripts lerna


    【解决方案1】:

    在使用 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
    

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 2013-01-13
      • 1970-01-01
      • 2012-07-19
      • 2018-02-28
      • 2014-07-10
      • 2021-08-10
      相关资源
      最近更新 更多