我有一个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"
}
}
lerna run build
将为每个程序包运行build
脚本。lerna run watch
将在监视模式下为每个程序包运行watch
脚本。 lerna run build
可以正常工作。 build
脚本在两个软件包中均可正常运行。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
,并且这只能运行一次。汇总完成后退出。换句话说,它似乎从来没有在观看。
答案 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());
}