使用Yarn工作区,如何将编译后的二进制文件链接到工作区后编译?

时间:2018-07-19 18:02:46

标签: symlink yarnpkg lerna monorepo yarn-workspaces

上下文

纱线工作区提供了方便的类似单仓库的功能,其中包被自动链接。即它们可以彼此要求/导入,并且它们的二进制文件是链接的,并且可以从工作区根目录访问。

一个例子:

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.jsyarn 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,因为这对于纱线工作区来说是多余的)。

0 个答案:

没有答案