https://github.com/dl0312/monorepo-tutorial
๐ถ It's time to study mono-repo
https://github.com/dl0312/monorepo-tutorial
Last synced: 15 days ago
JSON representation
๐ถ It's time to study mono-repo
- Host: GitHub
- URL: https://github.com/dl0312/monorepo-tutorial
- Owner: dl0312
- Created: 2019-08-08T02:25:29.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-09T00:33:54.000Z (about 2 years ago)
- Last Synced: 2024-10-11T21:07:31.548Z (4 months ago)
- Language: JavaScript
- Homepage:
- Size: 980 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# โ๏ธ Monorepo tutorial
# Monorepo๋?
๋ค์ํ ๋ชจ๋์ ์ฌ๋ฌ๊ฐ์ ๋ ํฌ์งํฐ๋ฆฌ๋ก ๊ด๋ฆฌํ์ง ์๊ณ , ํ๋์ ๋ ํฌ์งํ ๋ฆฌ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.`Monorepo`๋ฅผ ์ธ ์ํฉ์ด ์ด๋ค ๊ฒ์ด ์์๊น? ์ผ๋จ ๊ฐ์ฅ ๊ฐ๋จํ ์์๋ก๋ ํ๋ก ํธ ์๋์ ๋ฐฑ์๋๋ฅผ ํ๋์ ๋ ํฌ์งํ ๋ฆฌ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์๋ค. ๋ค์์ผ๋ก๋ ๊ฐ ํ๋ก์ ํธ์์ NPM ๋ชจ๋ ๋ง๋ค์ด๊ฐ๋ฉด์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฒฝ์ฐ๋ ์๋ค. ๋ง์ง๋ง์ผ๋ก ์น๊ณผ ์ฑ์ ๋ง๋ค๋ ์น ํน์ ์ฑ์์ ์ฌ์ฉํ๋ ๋ก์ง ํน์ ๋ชจ๋์ ๊ณต์ ํ๊ธฐ ์ํด `Monorepo`๋ฅผ ์ฐ๊ธฐ๋ํ๋ค.
## Monorepo์ ์ฅ์
**ํต์ผ์ฑ**์ด ์๊ธด๋ค - ์ฌ๋ฌ๊ฐ์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๊ด๋ฆฌ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ก์ง์ ๋ณด๊ฒ๋ ๊ธฐํ๊ฐ ๋ง์ด ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ํต์ผ๋์ง ์๊ณ ์ค๊ตฌ๋๋ฐฉ์ด ๋๋ค. ์ฌ๋ฌ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๊ด๋ฆฌ๋ ๊ฒฝ์ฐ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง ํจ์๊ฐ ์์ญ๊ฐ๊ฐ ๋์ด ๋ถํ์ํ ๊ณต๊ฐ์ ์ฐจ์งํ ์ ์๊ฒ๋๋ค. ๋ํ `lerna`๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ๋ณต์์ด ์ ์ผํ `npm` ํจํค์ง๋ฅผ ์ค์นํ๊ธฐ ๋๋ฌธ์ ๋ํ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๋ค.# yarn-workspaces
## ์ฌ์ฉ๋ฒ
๋ฐ๋ก npm ์ค์นํ npm package๋ ์๋ค.
`package.json` ํ์ผ์ `workspaces`๋ฅผ ์ง์ ํด์ฃผ๋ ๊ฒ๋ง์ผ๋ก ์ค์ ์ ๋ง๋ฌด๋ฆฌ๋๋ค.์ฌ๋ฌ `package`๋ค์ `packages`๋ผ๋ ํด๋์์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด ๊ฐ์ฅ ์ ๋ช ํ๋ค.
๋ค์์ ์์์ ๊ฐ์ด ๋ณดํต @๋ค์ `organization`์ ํด๋นํ๋ ์ด๋ฆ์ `prefix`๋ก ๋ถ์ฌ์ ๊ฐ ํจํค์ง์ ์ด๋ฆ์ง๋๋ค.
```json
{
"name": "@walnut/iloveyou3000",
...
}
```## ํน์ง
`packages`์ฌ์ด์์๋ ์๋ก๋ฅผ `npm` ํจํค์ง์ฒ๋ผ ๋ถ๋ฌ์ฌ ์ ์๋ค.```json
{
"name": "@walnut/server",
"version": "1.0.2",
"main": "index.js",
"license": "MIT",
"dependencies": {
"@walnut/common": "^1.0.1",
"graphql-yoga": "^1.14.7"
},
"scripts": {
"test": "echo testing server with version: $npm_package_version"
}
}
```
๋ฌผ๋ก ํด๋น ํจํค์ง ์์์ ๋ถ๋ฌ์จ ํจํค์ง๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
```js
const commonFunction = require('@walnut/common')
commonFunction()
```# lerna
[lerna](https://github.com/lerna/lerna) - ๐ A tool for managing JavaScript projects with multiple packages.์์ ์ธ๊ธํ๋ ๊ฒ์ฒ๋ผ ์ฌ๋ฌ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์์กด์ฑ์ ๋ฌถ์ด์ฃผ๋ ์ญํ ์ ํ๋ฉฐ, ๊ฐ ํจํค์ง๋ณ ์ ๋ฐ์ดํธ๋ฅผ ๋์์ค๋ค.
`yarn-workspaces`์ ๊ฐ์ด ์ฌ์ฉํ๋ ค๋ฉด `lerna.json`์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ด์ฃผ์ด์ผํ๋ค.
```json
{
...
"npmClient": "yarn",
"useWorkspaces": true,
...
}
```## ์ปค๋งจ๋
```shell
$ lerna bootstrap
```
์ฌ๋ฌ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์์กด์ฑ์ ๋ฌถ์ด์ ๊ฐ ํจํค์ง๋ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค๋ณต์ด ์๊ฒ ์ค์นํด์ค๋ค.## References
* ๐น[How to Use Lerna](https://www.youtube.com/watch?v=p6qoJ4apCjA)
* ๐น[Better code sharing through monorepos?](https://www.youtube.com/watch?v=0_qhdOeMuhk)
* ๐น[Marcel Cutts - MonoRepos for the Masses | ReactNext 2018](https://www.youtube.com/watch?v=rdeBtjBNcDI)
* ๐น[Uber Technology Day: Monorepo to Multirepo and Back Again](https://www.youtube.com/watch?v=lV8-1S28ycM)
* ๐น[Jacob Bass: Modularity and Monorepositories](https://www.youtube.com/watch?v=7Lr8xYPKG5w)
* ๐น[Yarn Workspaces Tutorial](https://youtu.be/G8KXFWftCg0) by Ben Awad