Vue

Vue + eslint + prettier

frontChoi 2022. 2. 24. 08:26
๋ฐ˜์‘ํ˜•

๐Ÿ›น VSCode์—์„œ Eslint  Prettier ์„ค์น˜

Eslint ์„ค์น˜
Prettier ์„ค์น˜

Eslint + Prettier ์„ค์น˜๋ฅผ ํ•ด์ค€๋‹ค.

 

 

๐Ÿš eslint ๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

npm i eslint eslint-config-prettier eslint-plugin-prettier eslint-plugin-vue --save-dev

 

๐Ÿšก ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋ ˆ๋ฒจ์— ๋ฆฐํŠธ ์„ค์ • ํŒŒ์ผ .eslintrc.js ์ถ”๊ฐ€

// eslint-disable-next-line no-undef
module.exports = {
	// ํ˜„์žฌ eslintrc ํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ESLint ๊ทœ์น™์„ ์ ์šฉ
	root: true,
	// ์ถ”๊ฐ€์ ์ธ ๊ทœ์น™๋“ค์„ ์ ์šฉ
	extends: [
		'eslint:recommended',
		'plugin:vue/essential',
		'prettier',
		'plugin:prettier/recommended',
	],
	// ์ฝ”๋“œ ์ •๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€
	plugins: ['prettier'],
	// ์‚ฌ์šฉ์ž ํŽธ์˜ ๊ทœ์น™ ์ถ”๊ฐ€
	rules: {
		'prettier/prettier': [
			'error',
			// ์•„๋ž˜ ๊ทœ์น™๋“ค์€ ๊ฐœ์ธ ์„ ํ˜ธ์— ๋”ฐ๋ผ prettier ๋ฌธ๋ฒ• ์ ์šฉ
			// https://prettier.io/docs/en/options.html
			{
				singleQuote: true, // '' ์‚ฌ์šฉ
				semi: true,
				useTabs: true,
				tabWidth: 2,
				trailingComma: 'all',
				printWidth: 80,
				bracketSpacing: true,
				arrowParens: 'avoid',
			},
		],
		// eslint-disable-next-line no-undef
		'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
	},
};

๐Ÿšž settings.json ์„ค์ • ์ถ”๊ฐ€

์œˆ๋„์šฐ ๊ธฐ์ค€์œผ๋กœ F1์„ ๋ˆ„๋ฅด๊ณ  settings.json์„ ๋ˆ„๋ฅด๊ณ  ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

"editor.formatOnSave": false,
"editor.formatOnType": false,
"editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
},
"eslint.alwaysShowStatus": true,
"eslint.workingDirectories": [
    {"mode": "auto"}
],
"eslint.validate": [
    "javascript",
    "typescript"
],

 

๐Ÿš„ ์ถ”๊ฐ€์ ์œผ๋กœ "Delete `โ` eslint (prettier/prettier)" ์—๋Ÿฌ๊ฐ€ ๋œฐ ๊ฒฝ์šฐ

์—๋Ÿฌ

์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— CRLF๋ฅผ ํด๋ฆญ ํ•œ ํ›„ LF๋ฅผ ํด๋ฆญํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

๋ฐ˜์‘ํ˜•