Skip to content

Bun monorepo

参考

Directory Structure

./
|-- bun.lockb
|-- package.json
`-- packages
    |-- pkg
    |   |-- index.ts
    |   `-- package.json
    |-- pkg-a
    |   |-- index.ts
    |   `-- package.json
    |-- pkg-b
    |   |-- index.ts
    |   `-- package.json
    `-- pkg-c
        |-- index.ts
        `-- package.json

実行前

 実行前には、以下のコマンドを実行。

sh
rm -rf node_modules
rm -rf bun.lockb
sh
bun install

"workspaces": ["packages/*"],指定する。

json
{
  "name": "monorepo-app",
  "type": "module",
  "private": true,
  "workspaces": ["packages/*"],
}

packages/pkg-a

json
{
  "name": "@packages/pkg-a"
}
ts
export const pkg_a = (): string => {
  return 'pkg-a'
}

package/pkg-b

json
{
  "name": "@packages/pkg-b"
}
ts
export const pkg_b = (): string => {
  return 'pkg-b'
}

package/pkg-c

json
{
  "name": "@packages/pkg-c"
}
ts
export const pkg_c = (): string => {
  return 'pkg-c'
}

 各パッケージをimportして、実行

ts
import { pkg_a } from '@packages/pkg-a'
import { pkg_b } from '@packages/pkg-b'
import { pkg_c } from '@packages/pkg-c'

const res_a = pkg_a()
const res_b = pkg_b()
const res_c = pkg_c()

const pkg = (): string => {
  return `pkg: ${res_a} ${res_b} ${res_c}`
}

console.log(pkg())

Execution

pkg: pkg-a pkg-b pkg-c

package.json

json
{
  "name": "@packages/pkg",
  "dependencies": {
    "@packages/pkg-a":  "workspace:*",
    "@packages/pkg-b":  "workspace:*",
    "@packages/pkg-c":  "workspace:*"
  }
}

versionを指定して、import

json
{
  "name": "@packages/pkg-a",
  "version": "1.0.0"
}
json
{
  "name": "@packages/pkg-b",
  "version": "1.0.0"
}
json
{
  "name": "@packages/pkg-a",
  "version": "1.0.0"
}

package.json

json
{
  "name": "@packages/pkg",
  "dependencies": {
    "@packages/pkg-a": "1.0.0",
    "@packages/pkg-b": "1.0.0",
    "@packages/pkg-c": "1.0.0"
  }
}

appspackagesに分割

Directory Structure

./
|-- Makefile
|-- README.md
|-- apps
|   `-- monorepo
|       |-- package.json
|       `-- src
|           `-- index.ts
|-- biome.json
|-- bun.lockb
|-- package.json
`-- packages
    |-- pkg
    |   |-- index.ts
    |   `-- package.json
    |-- pkg-a
    |   |-- index.ts
    |   `-- package.json
    |-- pkg-b
    |   |-- index.ts
    |   `-- package.json
    `-- pkg-c
        |-- index.ts
        `-- package.json
ts
import { pkg_a } from '@packages/pkg-a'
import { pkg_b } from '@packages/pkg-b'
import { pkg_c } from '@packages/pkg-c'

const res_a = pkg_a()
const res_b = pkg_b()
const res_c = pkg_c()

export const pkg = (): string => {
  return `pkg: ${res_a} ${res_b} ${res_c}`
}

apps/monorepo

json
{
  "name": "monorepo",
  "dependencies": {
    "@packages/pkg": "workspace:*"
  }
}
ts
import { pkg } from "@packages/pkg";

const res = pkg()

console.log(res)

Execution

pkg: pkg-a pkg-b pkg-c

versionを指定して、import

json
{
  "name": "@packages/pkg",
  "version": "1.1.1",
  "dependencies": {
    "@packages/pkg-a": "workspace:*",
    "@packages/pkg-b": "workspace:*",
    "@packages/pkg-c": "workspace:*"
  }
}

package.json

json
{
  "name": "monorepo",
  "dependencies": {
    "@packages/pkg": "1.1.1"
  }
}