Next.js
create-react-app, create-next-app 없이 하나씩 구축해보자!
tsconfig.json
tsconfig를 잘 작성해야하는 이유는?
- vscode의 intellisense(코드 문법 자동완성)가 typescript 처리하는 방법을 제어하기 위해서
- typescript를 컴파일하는 방법을 제어하기 위해서
$schema
schema는 schemaStore에서 제공해주는 정보로 자동완성, 툴팁, 공개API 사용을 가능하게 해준다.
"$schema" : "https//json.schemastore.org/tsconfig.json"
옵션 살펴보기
{
"compilerOptions": {
"target": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"allowJs": false,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames" : true,
"esModuleInterop" :true,
"useDefineForClassFields": true,
"skipDefaultLibCheck": false,
/* Bundler mode */
"module": "ESNext",
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
/* Linting */
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@components/*": ["src/components/*"]
}
},
"include": ["src", "**/*.ts", "**/*.tsx", "vite.config.ts"],
"exclude": ["node_modules"],
"references": [{ "path": "./tsconfig.node.json" }]
}
-
compilerOptions : 타입스크립트를 스크립트로 컴파일할 때 사용하는 옵션
-
"target" : "ESNext"
타입스크립트가 변환을 목표로 하는 언어의 버전 -
"lib": ["ES2020", "DOM", "DOM.Iterable"]
lib 항목을 정의하지 않았다면 target 항목에서 지정한 버전에 따라 기본값이 정의- ES5의 기본 값: dom, es5, scripthost
- ES6의 기본 값: dom, dom.iterable, es6, scripthost
-
"allowJs": false 자바스크립트 파일 컴파일 여부
-
"skipLibCheck": true 라이브러리에서 제공하는 d.ts 검사 여부, 일반적으로 껴놓는 경우가 많다.
-
"strict": true
컴파일러의 엄격모드 제어- alwaysStrict : 모든 js 파일에 use strict 추가
- strictNullChecks : null과 undefined 구분
- strictBindCallApply : call, bind, apply에 대해 정확한 인수 요구
- strictFunctionTypes : 함수 타입에 대한 엄격함 활성화
- strictPropertyInitialization : 클래스 내부의 프로퍼티에 값을 할당할 때 타입 파악
- noImplicitAny : 타입을 명시하지 않은 변수에 any를 넣지 않고 에러 발생
- noImplicitThis : this를 추론할 수 없는 상황에서 any를 할당하지 않고 에러 발생
- useUnknownInCatchVariables : catch 구문에서 잡은 변수에 대해서 unknown 할당
-
"useDefineForClassFields" : 파일 이름의 대소문자 구분 여부
-
"noEmit" : 컴파일하지 않고, 타입만 체크 / Next.js는 swc가 타입스크립트 파일을 컴파일
-
"esModuleInterop" : CommonJS 방식으로 내보낸 모듈을 ES모듈 방식으로 import 가능하도록 해준다.
-
"module" : 모듈 시스템 설정 / commonjs - require와 esnext - import
-
"moduleResolution" : 모듈 해석방식
-
"resolveJsonModule" : Json 파일을 import할 수 있게 해준다.
-
"isolatedModules" : import나 export없는 모듈 시스템과 연계되지 않은 파일의 생성을 막기 위한 옵션
-
"jsx" : JSX를 어떻게 컴파일할지 설정
-
"incremental" : 마지막 컴파일 정보를 .tsbuildinfo 파일 형태로 디스크에 저장 -> 컴파일이 빨라지는 효과
-
"baseUrl" : 모듈을 찾을 때 기준이 되는 디렉토리 지정
-
"paths" : 상대경로를 활용하면 중첩되면서 복잡해질수 있는데, 이때 경로에 별칭을 지정 / @는 스코프 패키지에 널리 사용되기 때문에 @의 사용은 자제하는 것이 좋다.
-
-
include : 타입스크립트 컴파일 대상에서 포함시킬 파일목록
-
exclude : 타입스크립트 컴파일 대상에서 제외시킬 파일목록
next.config.js
Next
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
poweredByHeader: false,
swcMinify: true,
eslint: {
ignoreDuringBuild: true,
},
};
module.exports = nextConfig;
- reactStrictMode : 리액트의 엄격 모드를 활성화
- poweredByHeader : 보안 취약점으로 취급되는 X-Powered-By 헤더(서버 사이드에서 사용하는 기술 ASP.NET, PHP, JBoss 등을 표시하는 비표준 헤더) 제거
- eslint.ignoreDuringBuild : 빌드시 ESLint 무시
ESLint, Prettier
잠재적인 문제, 띄어쓰기, 줄바꿈 등 코드의 스타일링을 정의하기 위해 아래와 같이 설치한다. @titicaca/eslint-config-triple는 설치 및 설정이 가장 쉽다.
npm i @titicaca/eslint-config-triple --save-dev
설치 후 package.json의 scripts 속성에 다음을 추가한다.
{
"scripts": {
"lint:es": "eslint .",
"lint:es:fix": "eslint . --fix"
}
}