lerna run --parallel不适用于汇总表

时间:2019-04-03 15:55:48

标签: rollupjs lerna yarn-workspaces

背景:

我有一个lerna monorepo,带有两个包装的纱线工作区。我正在使用汇总作为捆绑程序。

packages / module1 / package.json:

{
  scripts: {
    "watch": "rollup -c rollup.config.js --watch",
    "build": "NODE_ENV=production && rollup -c rollup.config.js"
  }
}

packages / module2 / package.json:

{
  scripts: {
    "watch": "rollup -c rollup.config.js --watch",
    "build": "NODE_ENV=production && rollup -c rollup.config.js"
  }
}

预期行为:

  1. lerna run build将为每个程序包运行build脚本。
  2. lerna run watch将在监视模式下为每个程序包运行watch脚本。

当前行为:

  1. lerna run build可以正常工作。 build脚本在两个软件包中均可正常运行。
  2. lerna run watch刚刚挂在那里:
lerna notice cli v3.13.1
lerna info Executing command in 2 packages: "yarn run watch"
[[just hangs here]]

我尝试过lerna run --parallel watch,并且这只能运行一次。汇总完成后退出。换句话说,它似乎从来没有在观看。

2 个答案:

答案 0 :(得分:0)

我相信您要查找的命令是lerna exec。这将运行在Monorepo中每个软件包上传递给它的任何命令。

lerna exec --parallel -- yarn build

如果每个软件包都具有相同的构建步骤,则可以将其抽象到顶层package.json,如下所示:

lerna exec --parallel -- rollup -c=rollup.config.js

将进入每个软件包并运行该汇总命令。


来源:

答案 1 :(得分:0)

需要一些调整,以使汇总能够并行监视lerna monorepo。

lerna run --parallel watch

上面的代码将仅对一个程序包运行,并阻止其余的程序包,这是汇总的内部工作代码。以下代码段是汇总github代码库中的Watcher类的构造函数。如您所见,观察者实际上接受一个配置数组。因此,现在您只需要编写一些包装器代码即可将所有配置合并为一个,然后对所有软件包从同一配置运行监视。

constructor(configs: GenericConfigObject[] | GenericConfigObject) {
    this.emitter = new (class extends EventEmitter implements RollupWatcher {
        close: () => void;
        constructor(close: () => void) {
            super();
            this.close = close;
            // Allows more than 10 bundles to be watched without
            // showing the `MaxListenersExceededWarning` to the user.
            this.setMaxListeners(Infinity);
        }
    })(this.close.bind(this));
    this.tasks = (Array.isArray(configs) ? configs : configs ? [configs] : []).map(
        config => new Task(this, config)
    );
    this.running = true;
    process.nextTick(() => this.run());
}