Yarn Workspace
.
├── apps
│ └── fizzbuzz
│ ├── package.json
│ └── src
│ └── index.ts
├── biome.json
├── package.json
├── packages
│ └── fizzbuzz
│ ├── package.json
│ └── src
│ └── index.ts
└── yarn.lock
package.json
json
{
"name": "yarn-workspace-tsx-test",
"private": true,
"scripts": {
"fmt": "yarn biome format --write ./"
},
"workspaces": ["apps/*", "packages/*"],
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"tsx": "^4.19.1"
}
}
apps
package.json
WARNING
Yarnを使用してMonorepoを構築する際、各パッケージのpackage.jsonにversionフィールドが指定されていないと、他のパッケージからそのパッケージをインポートできない。
json
{
"name": "@apps/fizzbuzz",
"version": "1.0.0",
"private": "true",
"dependencies": {
"@packages/fizzbuzz": "1.0.0"
}
}
TypeScript
ts
import { fizzBuzz } from '@packages/fizzbuzz'
console.log('Hello World!')
console.log(fizzBuzz(100))
packages
package.json
json
{
"name": "@packages/fizzbuzz",
"version": "1.0.0",
"private": "true",
"main": "src/index.ts"
}
TypeScript
ts
export const fizzBuzz = (number: number): string => {
if (number % 15 === 0) return 'FizzBuzz'
if (number % 3 === 0) return 'Fizz'
if (number % 5 === 0) return 'Buzz'
return number.toString()
}
Execution
sh
yarn install
yarn tsx watch apps/fizzbuzz/src/index.ts
Hello World!
Buzz