上下文
纱线工作区提供了方便的类似单仓库的功能,其中包被自动链接。即它们可以彼此要求/导入,并且它们的二进制文件是链接的,并且可以从工作区根目录访问。
一个例子:
workspace / package.json
{
"name": "200180719-yarn-bin",
"version": "1.0.0",
"workspaces": [
"packages/*"
],
"private": true
}
workspace / packages / a / package.json
{
"name": "a",
"version": "1.0.0",
"main": "src/index.js",
"bin": {
"mycli": "src/index.js"
}
}
workspace / packages / a / src / index.js
#!/usr/bin/env node
console.log('welcome to the cli')
如果您随后将目录切换到主工作区并运行yarn install
,yarn会正确链接二进制文件,然后可以运行:
yarn run mycli
从工作区目录中就可以了。太好了!
问题
我的问题是,如果必须首先编译您的代码,则在yarn install
完成之前,二进制文件将不可用(因为您不应该在版本控制中提供已编译的代码)。我使用Typescript编译cli:
将index.js
重命名为index.ts
并将a/package.json
更新为:
{
"name": "a",
"version": "1.0.0",
"main": "src/index.js",
"bin": {
"mycli": "dist/index.js"
},
"scripts": {
"build": "tsc src/index.ts --outDir dist",
"preinstall": "yarn run build"
},
"devDependencies": {
"typescript": "^2.9.2"
}
}
即使在工作区目录上运行dist/index.js
时yarn install
的构建正确,它也无法创建指向二进制文件的链接:
Toms-MacBook-Pro-2:200180719-yarn-bin tommedema$ yarn run mycli
yarn run v1.7.0
error Command "mycli" not found.
问题
当我的二进制文件需要在安装时进行编译时,如何使yarn工作区二进制链接工作?
如果我需要使用Lerna进行这项工作,那也完全可以(尽管最好避免调用lerna bootstrap
,因为这对于纱线工作区来说是多余的)。