create-next-app
사용하기npx create-next-app@latest --ts
# or
yarn create next-app --typescript
설치 후
npm run dev
or yarn dev
명령어를 치면
http://localhost:3000
에 다음과 같은 화면이 뜬다.
next
, react
, react-dom
설치하기npm install next react react-dom
# or
yarn add next react react-dom
package.json 파일을 열어 script
를 추가한다
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
}
각각의 의미는 다음과 같다.
dev
- 개발모드의 Next.js를 시작한다
build
- 실제로 가동하기 위한 어플리케이션을 구축한다
start
- Next.js 서버를 시작한다
lint
- Next.js에 내장되어있는 ESLint의 구성을 설정한다.
- ESLint
더 깔끔한 자바스크립트 코드를 작성하기 위한 코드 스타일 가이드, 문법적 오류나 안티 패턴을 고칠 수 있고 일관된 코드 스타일로 작성하도록 도와준다.
- Prettier
원본 스타일을 모두 제거하고 모든 코드가 일관된 스타일을 만들어주는 도구 (Opinionated Code Formatter). ESLint와 달리 논리적인 코드를 고쳐줄 순 없고, 오직 포맷팅만 해준다.
yarn add -D eslint eslint-plugin-import
eslint-plugin-import
: ES6 의 import/export syntax 체크, 파일 경로나 import 이름을 잘못 입력하는지 여부를 체크해주는 lint 플러그인.
yarn add -D prettier eslint-config-prettier eslint-plugin-prettier
eslint-config-prettier
: ESLint의 formatting 관련 설정 중 Prettier와 충돌하는 부분을 비활성화한다. Prettier 에서 문법 관련된 ESlint 규칙을 사용하지 않게 되기 때문에 ESLint 는 자바스크립트 문법을 담당하고, 코드 스타일 정리는 Prettier 가 담당하게 된다.
eslint-plugin-prettier
: 원하는 형식의 formatting 을 설정한다.
yarn add --dev eslint typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin
@typescript-eslint/parser
TS에서 ESLint를 사용할 수 있게 하는 *parser
*parser : _ 인터프리터나 컴파일러의 구성 요소 가운데 하나로, 입력 토큰에 내재된 자료 구조를 빌드하고 문법을 검사하는 것
@typescript-eslint/eslint-plugin
코드베이스에서 ESLint를 적용할 수 있게 하는 *plugin
*plugin : 웹 브라우저의 표준 기능을 확장해 주는 프로그램
.eslintrc.js
생성하기.eslintrc.js
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
plugins: [
'@typescript-eslint',
],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
],
};
root
true로 설정하지 않으면 파일 시스템의 상위 폴더까지 탐색하게 된다.
parser
위에서 설치한 parser를 적용한다. ESLint가 TS문법을 이해할 수 있게 한다.
plugin
위에서 설치한 plugin을 적용한다. 코드베이스 규칙을 따르게 한다.
extends
eslintignore
eslintignore
을 만들어 필요없는 파일을 무시할 수 있게 해준다.
# don't lint build output (make sure it's set to your correct build folder name)
dist
node_modules
각 페이지에 가서 설치한 후 적용하면 된다.
필자는 에어비엔비 설정을 적용했다.
yarn add -D eslint-config-airbnb-typescript
.eslintrc.js
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'prettier'],
extends: ['airbnb', 'airbnb-typescript', 'prettier'],
parserOptions: {
project: './tsconfig.json',
},
};
만약 eslint-config-prettier
을 추가했어도 ESLint와 prettier 사이에서 충돌이 날 수 있는데 그럴 경우 rules 옵션을 추가해주면 된다.
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'prettier'],
extends: ['airbnb', 'airbnb-typescript', 'prettier'],
parserOptions: {
project: './tsconfig.json',
},
rules: {
'@typescript-eslint/semi': 'off',
'@typescript-eslint/space-before-function-paren': 'off',
},
};
.prettierrc
{
"singleQuote": true,
"semi": true,
"useTabs": false,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 120,
"arrowParens": "always"
}
singleQuote
: single 쿼테이션 사용 여부semi
: 세미콜론 사용 여부useTabs
: 탭 사용 여부tabWidth
: 탭 너비trailingComma
: 여러 줄을 사용할 때, 후행 콤마 사용 방식printWidth
: 줄 바꿈 할 폭 길이arrowParens
: 화살표 함수 괄호 사용 방식https://typescript-eslint.io/docs/linting/
https://nextjs.org/docs