오늘은 지난 글에 이어 모노레포를 도입하고, 프로젝트를 초기 세팅한 과정에 대해서 간략히 소개하겠습니다.
npm
에서 최신 버전의 yarn
을 내려받아주세요.$ npm install -g yarn
yarn
버전을 berry
로 설정해주세요.$ yarn set version berry
yarn init
으로 package.json
파일을 만들어줍니다.$ yarn init
package.json
파일을 설정해줍니다. 저는 루트 경로의 /packages
폴더 내부의 모든 폴더가 workspace에 속하도록 만들었습니다.{
"name": "monorepo",
"private": true,
"workspaces": {
[
"packages/*"
],
},
"packageManager": "yarn@3.0.2"
}
$ yarn add -D typescript
$ yarn add -D @types/node @types/react @types/jest
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"moduleResolution": "Node",
"resolveJsonModule": true,
"esModuleInterop": true,
"strict": true,
"target": "es6",
"lib": ["ES5", "ES6", "ESNext", "DOM"],
"skipLibCheck": true,
"baseUrl": ".",
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"isolatedModules": true
},
/* // 각 프로젝트에 오버라이드할 tsconfig 파일이 있다면 추가
"references": [
{
"path": "packages/common-components"
},
{
"path": "packages/common-styles"
},
{
"path": "packages/common-utils"
},
],
*/
"exclude": ["packages/**/dist/**"],
}
$ yarn add -D eslint
$ npx eslint --init
The config that you've selected requires the following dependencies:
eslint-plugin-react@latest @typescript-eslint/eslint-plugin@latest @typescript-eslint/parser@latest
? Would you like to install them now with npm? ‣ No / Yes
yarn add -D eslint-plugin-react @typescript-eslint/eslint-plugin @typescript-eslint/parser
{
"env": {
"browser": true,
"es2021": true,
"jest": true
},
"extends": [
"airbnb",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": [
"react",
"react-hooks",
"prettier",
"@emotion",
"jest",
"jest-dom"
],
"rules": {
"prettier/prettier": "error",
},
"settings": {
"import/resolver": {
"typescript": {}
}
}
}
$ yarn add -D prettier
$ yarn add -D eslint-config-prettier eslint-plugin-prettier
{
"arrowParens": "always",
"bracketSameLine": true,
"bracketSpacing": true,
"embeddedLanguageFormatting": "auto",
"endOfLine": "lf",
"htmlWhitespaceSensitivity": "css",
"insertPragma": false,
"jsxSingleQuote": false,
"printWidth": 80,
"proseWrap": "preserve",
"quoteProps": "as-needed",
"requirePragma": false,
"semi": false,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none",
"useTabs": false,
"vueIndentScriptAndStyle": false,
"disableLanguages": []
}
https://yarnpkg.com/getting-started/editor-sdks#vscode
typescript, eslint, prettier를 사용할 때 yarn berry를 사용하면 PnP 사용 때문에 해당 모듈을 찾지 못하는 경우가 있다. 그러므로 아래 작업을 진행한다.
이 작업은 위의 모듈을 모두 설치한 다음에 진행해야한다.
$ yarn dlx @yarnpkg/sdks vscode
typescript 파일에서 ctrl + shift + p
누르기
"Select TypeScript Version" 선택하기
"Use Workspace Version" 선택하기
다음편에서는 /packages에 components를 위한 workspace(with react, storybook, emotion)를 구축하는 과정을 소개하겠습니다.
우아한형제들 기술블로그 - Yarn berry workspace를 활용한 프론트엔드 모노레포 구축기
https://techblog.woowahan.com/7976/
monorepo template 깃허브
https://github.com/kowoohyuk/monorepo-template
emotion 공식문서
https://emotion.sh/docs/@emotion/eslint-plugin
Yarn 공식문서 - Editor SDKs
https://yarnpkg.com/getting-started/editor-sdks#vscode