Spring Boot 프로젝트에서 Babel7, Prettier, ESLint 환경을 세팅하고 사용해봅시다 ( •̀ ω •́ )✧
본격적으로 프로젝트 세팅과 환경 세팅을 천천히! 하나하나! 진행해봅시다! 🙋♀️
Spring Initializr
를 선택해 SDK 버전과 Artifact, Java Version 등을 진행하려는 프로젝트에 맞게 선택한 후 프로젝트를 생성합니다./src/main/java/{package}
아래에 controller
폴더를 생성한 후 IndexController.java
파일을 생성합니다.@Controller
public class IndexController {
@GetMapping("/")
public String index(Model model) {
model.addAttribute("msg", "hello");
return "index";
}
}
/src/main/resources/templates
안에 index.html
파일을 생성하고 아래와 같이 코드를 적어주세요.<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Spring Boot + Babel</title>
</head>
<body>
<h1 th:text="${msg}"></h1>
</body>
</html>
이렇게 작성하고 IntelliJ의 Run
을 한 후 localhost:8080
(만약 포트를 바꾸셨다면 그 포트로) 접속하면 IndexController
에서 model
에 담아 보낸 msg
가 h1
태그 안에서 보이게 됩니다.
30%정도 완성되었어요! 이제 본격적으로 Babel, Prettier, ESLint 등을 세팅해봅시다. 🏃♀️
npm init
을 입력합니다. 쭉 내려오는 질문들에 적절한 답을 적고 (따로 적을 필요가 없다면 쭉 엔터를 누르다가 마지막에 yes
를 입력하시면 됩니다.) package.json
이 생성되었는지 확인합니다.npm i --save-dev @babel/core @babel/cli @babel/preset-env
를 입력하고 엔터를 쳐줍니다.@babel/core
, @babel/cli
, @babel/preset-env
를 설치한다는 뜻이며 --save-dev
라는 옵션은 package.json 내에 빌드시 포함되지 않는 플러그인이 들어가는 devDependencies
객체 안에 저장되게 한다는 뜻입니다.제가 설치한 Babel은 version 7 이상입니다. 버전이 다를 경우 이후 진행되는 세팅 과정이 다를 수 있으니 버전 확인 꼭 해주세요
.babelrc
파일을 생성합니다. 맨 앞에 마침표를 까먹으시면 안돼요! babel 설정파일이라는 뜻입니다..babelrc
파일 안에 presets를 세팅해줍니다. targets
옵션은 지원하는 브라우저를 세팅해줍니다. 더 자세한 브라우저 리스트는 여기를 참고하세요.{
"presets": [
[
"@babel/preset-env",
{"targets": "> 5%, Firefox > 1, last 2 versions"}
]
]
}
package.json
으로 가서 scripts
안에 있는 코드를 지우고 아래와 같이 바꿔줍니다."babel": "babel src/main/resources/static/es6 -d src/main/resources/static -w"
분석을 좀 해볼까요?
"babel"
은 npm run 뒤에 올 명령어입니다. build
를 써도 되고 wingardium_leviosa
를 써도 됩니다. 편한대로 사용하세요."babel"
은 트랜스파일링하는 babel
자체의 명령어입니다.src/main/resources/static/es6
는 트랜스파일링 전 ES6 js 파일이 들어있는 폴더의 위치입니다.-d
옵션으로 파일로 ouput을 지정하고src/main/resources/static
에 저장합니다-w
옵션으로 파일이 save될 때마다 npm run babel을 실행시킵니다.Babel 세팅이 끝났습니다! 이제 Prettier로 넘어가볼게요 🚗
npm i --save-dev -save-exact prettier
를 입력합니다. --save-exact
옵션을 적용하면 package.json에서 version에 ^
가 없이 적히게 되는데 이는 자동 버전 업데이트로 인한 오류를 방지하기 위해 버전을 고정시키는 옵션입니다..prettierrc
파일을 생성합니다. Prettier 옵션은 여기를 참고해주세요. 저는 이렇게 적어두었습니다.{
"trailingComma": "es5",
"tabWidth": 2,
"semi": true,
"singleQuote": true
}
간단하죠? Prettier 설정도 끝났습니다. 이제 ESLint를 설치해볼게요
npm i --save-dev eslint
로 eslint를 설치합니다.eslint --init
로 eslint 설정파일을 생성해봅시다. 아래로 나오는 질문들에는 방향키로 선택한 후 엔터를 누르면 됩니다. 제가 선택한 답변은 이탤릭체로 적어둘게요. 각자 맞는 세팅에 따라 선택해주시되, 첫번째 질문은 2번을 선택해주세요yes
를 입력해주세요. 설치가 다 끝났다면 package.json에 가서 아래 사진에 있는 것들이 다 있는지 확인해주세요.npm i --save-dev babel-eslint
를 입력합니다.npm i --save-dev eslint-config-prettier
로 eslint-config-prettier
를 설치해줍니다..eslintrc.json
파일에 있는 extends를 아래와 같이 바꿔줍니다."extends" : ["airbnb-base", "plugin:prettier/recommended"]
"parser": "babel-eslint",
를 제일 외부에 있는 객체 바로 아래에 추가해줍니다.{
"parser": "babel-eslint",
"env": {
"browser": true,
"es6": true
},
"extends": ["airbnb-base", "plugin:prettier/recommended"],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module"
},
"ignorePatterns": ["/src/main/resources/static/*.js"],
"rules": {
"no-var": "warn",
"no-unused-vars": "warn",
"prefer-const": "off",
"prettier/prettier": [
"warn",
{
"endOfLine": "auto"
}
]
}
}
{
"eslint.validate": ["javascript"], // eslint를 적용할 파일 타입
"editor.defaultFormatter": "esbenp.prettier-vscode", // fomatter (우리는 Prettier를 사용합니다)
"editor.formatOnSave": true, // save마다 포맷팅을 시킬 것인지
}
모든 설치와 세팅이 끝났습니다! 🙌 이제 코드를 돌려볼까요?
index.js를 es6 폴더 안에 생성하고 아래와 같이 작성했습니다.
Terminal에 npm run babel
을 한 후 save를 한 후 ES5로 트랜스파일링한 JS 파일을 확인해보면 이렇게 바뀐 것을 볼 수 있습니다.
arrow function이 일반 function으로 바뀌었고 간소화된 object도 key와 value가 따로 각각 들어가는 ES5 형태로 바뀌었습니다.
FE 개발 환경을 ES6로 바꿔가고 싶어서 세팅 연습을 해보았습니다! 혹시 스프링부트와 Babel 세팅에 어려움을 겪으신 분들이 계시면 도움이 되셨으면 좋겠네요! 🥳