ErrorLog

ESLint / Prettier가 작동 안 됨 (ES Module)

ihl 2021. 8. 24. 20:54

  eslint, prettier를 적용한 뒤 작업을 하던 중 어느 순간부턴가 저장을 해도 자동으로 변경이 안된다. 이를 해결하기 위해 먼저 eslint output panel을 살펴보았다.

 

[Info  - 2:16:58 PM] Must use import to load ES Module: 
/Users/user/Documents/development/practice/.prettierrc.js 
require() of ES modules is not supported. 

require() of /Users/user/Documents/development/practice/.prettierrc.js 
from /Users/user/Documents/development/practice/node_modules/prettier/third-party.js is
an ES module file as it is a .js file whose nearest parent package.json 
contains "type": "module" which defines all .js files in that package scope as ES modules. 
Instead rename .prettierrc.js to end in .cjs, 
change the requiring code to use import(), or remove "type": "module" 
from /Users/user/Documents/development/practice/package.json.  

Occurred while linting /Users/user/Documents/development/practice/app.js:1

  나는 코드를 작성할 때 require, module.export 보다는 ES 6부터 도입된 import, export 모듈을 선호하는 편이다. 이 때문에 package.json에 type:module을 넣었고, bable-eslint를 설치하여 Eslint의 파서로 사용하고 있었다. 그런데 이 때문에 오히려 prettier 설정 파일인 .prettierrc.js 를 읽지 못하는 오류가 발생한 것으로 추측된다. 

 

module.exports = {
  "singleQuote": true,
  "semi": true,
  "useTabs": false,
  "tabWidth": 2,
  "trailingComma": "all",
  "printWidth": 80,
  "arrowParens": "avoid"
};

  .prettierrc.js는 기본적으로 module.exports 형식을 사용하고 있다. 따라서 ES6 모듈 형식을 사용하기 위한 설정들과는 맞지 않는 것이다. 이를 고치기 위해선 .prettierrc.js를 json 형식으로 변경하면 된다.

 

{
  "singleQuote": true,
  "semi": true,
  "useTabs": false,
  "tabWidth": 2,
  "trailingComma": "all",
  "printWidth": 80,
  "arrowParens": "avoid"
}

  위와 같이 .prettier.js 를 .prettier.json으로 변경하게되면 저장 후 포맷팅이 잘 동작한다!