Yarn 2中的工作区全局bin脚本

问题描述

我有一个带有两个工作区的yarn 2工作区项目:

|-foo
\-bar

现在,在根package.json中,我引入了常见的dev-depenencies:

"devDependencies": {
    "@rollup/plugin-commonjs": "^14.0.0","@rollup/plugin-node-resolve": "^8.4.0","@rollup/plugin-replace": "^2.3.3","@rollup/plugin-typescript": "^5.0.2","@types/jest": "^26.0.13","nollup": "^0.13.10","rimraf": "^3.0.2","rollup": "^2.23.1","ts-jest": "^26.3.0","tslib": "^2.0.1","typescript": "^4.0.2"
  }

如何从foo和bar的package.json中的脚本轻松地(无需过多重复)现在引用汇总等?

示例:foo / package.json

"build": "rollup ...",

写“ ../node_modules/.bin/rollup”很烂。

注意,我不想全局安装汇总。

解决方法

要运行安装在根工作区中的可执行文件,您可以说:

"build": "run -T rollup",

-T 用于 --top-level,目前没有任何记录。我从一位维护者那里得知它存在于 Yarn Discord 服务器上。

https://github.com/yarnpkg/berry/blob/bef203949d9acbd42da9b47b2a2dfe3615764eaf/packages/plugin-essentials/sources/commands/run.ts#L47-L49

,

因此,我找到了一个不错的解决方案。在工作区根目录中,我为脚本中要使用的命令添加了一些可执行文件,例如:

tsc

#!/bin/bash
$(dirname "${BASH_SOURCE[0]}")/node_modules/.bin/tsc -b -f "$@"

rollup

#!/bin/bash
$(dirname "${BASH_SOURCE[0]}")/node_modules/.bin/rollup "$@"

这些基本上将调用“转发”到实际的二进制文件,并可能添加一些通用参数。

在我的foo / bar package.json中,我现在可以引用这些脚本:

    "dev:compile": "../tsc","build": "../tsc && ../rollup -c rollup.config.js",