npx create-react-app {프로젝트이름} --template typescript
yarn create react-app {프로젝트이름} --template typescript
// tsconfig.json
{
"compilerOptions": {
...
"baseUrl": "./src",
"paths": {
"@/*": ["*"] // src/App.tsx는 @/App.tsx로 경로 설정
},
...
}
}
# npm
npm install -D @craco/craco
# yarn
yarn add -D @craco/craco
// craco.config.js
module.exports = {
webpack: {
alias: {
'@': path.resolve(__dirname, 'src/'),
},
},
}
# npm
npm install -D eslint prettier
# yarn
yarn add -D eslint prettier
# npm
npm install -D eslint-config-prettier eslint-plugin-prettier
# yarn
yarn add -D eslint-config-prettier eslint-plugin-prettier
# npm
npm install -D @typescript-eslint/parser @typescript-eslint/eslint-plugin
# yarn
yarn add -D @typescript-eslint/parser @typescript-eslint/eslint-plugin
# npm
npm install -D eslint-import-resolver-typescript
# yarn
yarn add -D eslint-import-resolver-typescript
{
"env": { "node": true, "browser": true },
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint", "prettier"],
"extends": [
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
],
"rules": {},
"settings": {
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"]
},
"import/resolver": {
"typescript": {}
}
}
}
{
"printWidth": 80,
"singleQuote": true,
"arrowParens": "avoid",
"semi": true,
"useTabs": false,
"trailingComma": "all",
"tabWidth": 2
}
# npm
npm install -D eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks
# yarn
yarn add -D eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks
{
"env": { "node": true, "browser": true },
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint", "prettier"],
"extends": [
"airbnb",
"airbnb/hooks",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
],
"rules": {
"react/jsx-filename-extension": [
"warn",
{ "extensions": [".js", ".jsx", ".ts", ".tsx"] }
],
"import/no-unresolved": "error",
"import/extensions": [
"error",
"ignorePackages",
{
"js": "never",
"jsx": "never",
"ts": "never",
"tsx": "never"
}
]
},
"settings": {
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"]
},
"import/resolver": {
"typescript": {}
}
}
}
// craco.config.js
module.exports = {
...
jest: {
configure: {
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1',
},
},
},
...
}