Skip to content

Npm Monerepo

Directory Structure

.
├── apps
│   ├── package.json
│   ├── src
│   │   └── index.ts
│   └── tsconfig.json
├── biome.json
├── package.json
├── package-lock.json
├── packages
│   └── fizzbuzz
│       ├── package.json
│       ├── src
│       │   └── index.ts
│       └── tsconfig.json
└── tsconfig.base.json
json
{
  "name": "npm-monorepo-test",
  "private": true,
  "workspaces": ["apps", "packages/*"],
  "devDependencies": {
    "@biomejs/biome": "^1.8.3"
  }
}
json
{
  "compilerOptions": {
    "target": "es2017",
    "module": "commonjs",
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true,
    "declaration": true
  }
}

apps

tsconfig.base.jsonextendsするが、outdirはこちらで指定しないと、ビルド先のパスがおかしくなる。

json
{
  "name": "apps",
  "devDependencies": {
    "@types/node": "^22.5.1",
    "typescript": "^5.5.4"
  }
}
ts
import { fizzBuzz } from 'fizzbuzz'

console.log('fizz Buzz Start')

fizzBuzz(100)

console.log('fizz Buzz End')
json
{
  "extends": "../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./dist"
  },
  "include": ["src/**/*.ts"]
}

packages/fizzbuzz

tsconfig.base.jsonextendsするが、outdirはこちらで指定しないと、ビルド先のパスがおかしくなる。

json
{
  "name": "fizzbuzz",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "devDependencies": {
    "@types/node": "^22.5.1",
    "typescript": "^5.5.4"
  }
}
ts
export function fizzBuzz(n: number): void {
  for (let i = 1; i <= n; i++) {
    console.log(i % 15 === 0 ? 'FizzBuzz' : i % 3 === 0 ? 'Fizz' : i % 5 === 0 ? 'Buzz' : i)
  }
}
json
{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./dist"
  },
  "include": ["src/**/*.ts"]
}

Execution

fizz Buzz Start
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
...
fizz Buzz End