eslint-config-bananass
Version: 
ESLint Config for Bananass Framework.๐
162 lines (109 loc) โข 7.53 kB
Markdown
# ๋ฐ๋๋<sup>Bananass</sup>
[](https://github.com/lumirlumir/npm-bananass/actions/workflows/lint.yml)
[](https://github.com/lumirlumir/npm-bananass/actions/workflows/test.yml)
[](https://github.com/lumirlumir/npm-bananass/actions/workflows/test-cross-platform.yml)
[](https://codecov.io/gh/lumirlumir/npm-bananass)

[](https://www.npmjs.com/package/bananass)
[](https://www.npmjs.com/package/bananass)
<kbd>ํ๊ตญ์ด</kbd> | <kbd>[English](README.en.md)</kbd>
๋ฐฑ์ค ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ.
์๋ฐ์คํฌ๋ฆฝํธ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์  ํ์ด์ ์๋ก์ด ํจ๋ฌ๋ค์.
> [!IMPORTANT]
>
> ```js
> const whyBananass = {
>   banana: '๐',
>   bananas: '๐๐',
>   bananass: '๐๐๐๐',
> }
> ```
>
> ```js
> console.log(('b' + 'a' + +'a' + 'a').toLowerCase() + (!(1/0) + [])[3].repeat(2));
> ```
<!-- markdownlint-disable-next-line md026 -->
## ์๋
, ๋ฐ๋๋!
๋ฐ๋๋<sup>Bananass</sup> ํ๋ ์์ํฌ์ ์ค์  ๊ฒ์ ํ์ํฉ๋๋ค!
๋ฐ๋๋๋ **์๋ฐ์คํฌ๋ฆฝํธ<sup>JavaScript</sup> ๋ฐ ํ์
์คํฌ๋ฆฝํธ<sup>TypeScript</sup> ๊ธฐ๋ฐ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์  ํ์ด๋ฅผ ์ํ ํ๋ ์์ํฌ**๋ก, [๋ฐฑ์ค](https://www.acmicpc.net/)ใ[์ฝ๋ํฌ์ค](https://codeforces.com/) ๋ฑ ๋ค์ํ ๋ฌธ์  ํ์ด ํ๋ซํผ๋ค์ Node.js ํ๊ฒฝ์์ ๋ฐ๋ณต์ ์ผ๋ก ๋ง์ฃผ์น๋ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ๋ฉฐ, ๊ฐ๊ฒฐํ๊ณ  ํธ๋ฆฌํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ํ์
์คํฌ๋ฆฝํธ<sup>TypeScript</sup> ์ง์์ด ํ์ํ์๋ค๊ณ ์?
- ES16<sup>ES2025</sup> ๋ฑ ์๋ฐ์คํฌ๋ฆฝํธ ์ต์  ๋ฌธ๋ฒ์ ์ฐ๊ณ  ์ถ์๋ฐ ๋งํ์
จ๋์?
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ  ์ถ์ผ์ ๊ฐ์?
- ๋งค๋ฒ `readline` / `fs` ํ
ํ๋ฆฟ ์ฝ๋ ๋ณต๋ถํ๊ธฐ ์ง์น์
จ๋์?
์ด์  ๊ฑฑ์ ํ์ง ๋ง์ธ์! ๋ฐ๋๋ ํ๋ ์์ํฌ๋ ์ด๋ฐ ๋ฌธ์ ์ ๋ค์ ๋ชจ๋ ํด๊ฒฐํฉ๋๋ค.
## ์ ๋ฐ๋๋์ผ๊น์?
ํจ๊ป ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ [๋ฐฑ์ค 1000๋ฒ: A+B](https://www.acmicpc.net/problem/1000) ๋ฌธ์  ํ์ด ์์ ๋ฅผ ์ดํด๋ด
์๋ค!
- ๊ธฐ์กด ๋ฐฉ๋ฒ์ ํตํ ๋ฌธ์  ํ์ด.
    ```js
    const readline = require('node:readline');
    const { EOL } = require('node:os');
    let inputStr = '';
    const rl = readline.createInterface({
      input: process.stdin,
      output: process.stdout,
    });
    rl.on('line', line => {
      inputStr = `${inputStr}${line}${EOL}`;
    }).on('close', () => {
      console.log(solution(inputStr));
      process.exit(0);
    });
    function solution(input) {
      const [a, b] = input
        .trim()
        .split(' ')
        .map(val => Number(val));
      return a + b;
    }
    ```
- ๋ฐ๋๋ ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํ ๋ฌธ์  ํ์ด.
    ```js
    function solution(input) {
      const [a, b] = input
        .trim()
        .split(' ')
        .map(Number);
      return a + b;
    }
    export default { solution };
    ```
๋ ๊ฐ๊ฒฐํ๊ณ , ๋ ์ง๊ด์ ์ธ ์ฝ๋! ์
๋ ฅ ์ฒ๋ฆฌ์ ๋ค์ด๋ ์๊ฐ์ ์ค์ด๊ณ , ์ค์ง ์๊ณ ๋ฆฌ์ฆ์๋ง ์ง์คํ  ์ ์์ต๋๋ค.
## ์ด๊ฒ ์ ๋ถ์ธ๊ฐ์?
๋ฌผ๋ก , ์๋๋๋ค!
- ์๋ฐ์คํฌ๋ฆฝํธ<sup>JavaScript</sup> ๋ฐ ํ์
์คํฌ๋ฆฝํธ<sup>TypeScript</sup> ์ง์.
- ESM<sup>ECMAScript Module</sup> ๋ฐ CommonJS ๋ชจ๋ ์์คํ
 ์ง์.
- ๋ฐฑ์ค Node.js ํ๊ฒฝ์ ๊ตฌ์ ๋ฐ์ง ์๋ ES16<sup>ES2025</sup> ๋ฑ ์ต์  ๋ฌธ๋ฒ ์ง์.
- ์ฌ์ฉ์ ์ ์ ๋ชจ๋ ๋ฐ `lodash` ๋ฑ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ ์ง์.
- ํ๋ก๊ทธ๋๋จธ์ค์ฒ๋ผ `solution` ํจ์ ํ๋๋ก ์์ํ๊ธฐ ์ง์.
- ํ
์คํธ ์ผ์ด์ค ์์ฑ ๋ฐ ์คํ ์ง์.
- `create-bananass`๋ก ์์ํ๊ธฐ ์ง์.
- `fs` ๋ชจ๋์ ์ฌ์ฉํ ๋์ฑ ๋น ๋ฅธ ์
์ถ๋ ฅ ์ง์.
- ํธ์๋ฅผ ์ํ ๋ค์ํ CLI ๋ช
๋ น์ด ์ง์.
- ํ๋ถํ๊ณ  ์์ธํ ๋ฌธ์ ์ง์.
- ESLint ๋ฐ Prettier ์์ฒด ์ง์.
์ด๋ค๊ฐ์? ๋ฐ๋๋ ํ๋ ์์ํฌ๋ฅผ ํตํด ๋์ฑ ํธ๋ฆฌํ ๋ฌธ์  ํ์ด๋ฅผ ๊ฒฝํํด๋ณด๊ณ  ์ถ์ง ์์ผ์ ๊ฐ์?
## ๋ฐ๋๋๋ก ์์ํ๊ธฐ
[React](https://ko.react.dev)์ `create-react-app`, [Next.js](https://nextjs.org)์ `create-next-app` ์ฒ๋ผ, ๋ฐ๋๋ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ `create-bananass`๋ก ์ง๊ธ ๋ฐ๋ก ์๋ก์ด ๋ฌธ์  ํ์ด ํจ๋ฌ๋ค์์ ๊ฒฝํํด๋ณด์ธ์!
๋ฐ๋๋ ํ๋ ์์ํฌ๋ `create-bananass`๋ฅผ ํตํด ์ฆ์ ์ค์นํ๊ณ  ์ฌ์ฉํ  ์ ์์ต๋๋ค.
```sh
npm create bananass@latest
```
๋ ์์ธํ ์ฌ์ฉ๋ฒ์ [๋ฐ๋๋ ํ๋ ์์ํฌ ๋ฌธ์](https://bananass.lumir.page)๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
## ๋ฐ๋๋ ํ๋ ์์ํฌ ๋ฌธ์
๋ฐ๋๋ ํ๋ ์์ํฌ๋ ๋ฌธ์ํ๋ฅผ ๊ฐ์ฅ ํฐ ๊ฐ์น๋ก ์ฌ๊น๋๋ค. ๋ฐ๋๋ ํ๋ ์์ํฌ์ ๋ชจ๋  ์ฌ์ฉ๋ฒ๊ณผ ๊ธฐ๋ฅ์ [๋ฐ๋๋ ํ๋ ์์ํฌ ๋ฌธ์](https://bananass.lumir.page)์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
## ๊ธฐ์ฌ(์ด์<sup>Issue</sup>, ๋์ด์ค๊ธฐ ์์ฒญ<sup>Pull Request</sup>, ํ ๋ก <sup>Discussion</sup>)
๋ฐ๋๋ ํ๋ ์์ํฌ ๊ธฐ์ฌ์ ๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค!
๋ฒ๊ทธ<sup>Bug</sup> ๋ฐ ์ ์<sup>Suggestion</sup> ๋ฑ ์ฌ๋ฌ ์ฃผ์ ์ ๋ํ ์ด์<sup>Issue</sup>, ๋์ด์ค๊ธฐ ์์ฒญ<sup>Pull Request</sup>, ํ ๋ก <sup>Discussion</sup> ๋ฑ์ ๋ชจ๋ ํ์ํฉ๋๋ค.
๋ค๋ง, ์ฌ๋ฐ๋ฅธ ์ปค๋ฎค๋ํฐ ํ๊ฒฝ์ ์ค์ํ๊ณ  ๋ ๋์ ์คํ ์์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด, ๋ฐ๋๋ ํ๋ ์์ํฌ์ ๊ธฐ์ฌํ๊ธฐ ์  ๋ฐ๋์ ์๋ ๋ด์ฉ๋ค์ ํ์ธํด์ฃผ์ธ์.
- [๊ธฐ์ฌ์ ํ๋ ๊ฐ๋ น ๊ท์ฝ](https://github.com/lumirlumir/.github/blob/main/CODE_OF_CONDUCT_KO.md#%EA%B8%B0%EC%97%AC%EC%9E%90-%ED%96%89%EB%8F%99-%EA%B0%95%EB%A0%B9-%EA%B7%9C%EC%95%BD)
- [๊ธฐ์ฌํ๊ธฐ](CONTRIBUTING.md)
## ๋ฒ์  ์ ์ฑ
<sup>Versioning</sup>
๋ฐ๋๋ ํ๋ ์์ํฌ๋ [์ ์์  ๋ฒ์  ์ ์ฑ
<sup>Semantic Versioning</sup>](https://semver.org/lang/ko/)์ ๋ฐ๋ฆ
๋๋ค. ๋ชจ๋  ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ `์ฃผ(MAJOR).๋ถ(MINOR).์(PATCH)` ํ์์ ๋ฐ๋ฆ
๋๋ค.
## ๊ธฐ์ฌ์ ํ๋ ๊ฐ๋ น ๊ท์ฝ<sup>Code of Conduct</sup>
์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ๊ธฐ ์ , [๊ธฐ์ฌ์ ํ๋ ๊ฐ๋ น ๊ท์ฝ](https://github.com/lumirlumir/.github/blob/main/CODE_OF_CONDUCT_KO.md#%EA%B8%B0%EC%97%AC%EC%9E%90-%ED%96%89%EB%8F%99-%EA%B0%95%EB%A0%B9-%EA%B7%9C%EC%95%BD)์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
## ๋ณ๊ฒฝ ์ฌํญ<sup>Change Log</sup>
๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ์ธํ๋ ค๋ฉด, [๋ณ๊ฒฝ ์ฌํญ](CHANGELOG.md)์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
## ๋ณด์<sup>Security</sup>
๋ณด์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์
จ๋์? [๋ณด์](SECURITY.md) ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
## ๋ผ์ด์ ์ค<sup>License</sup>
๋ฐ๋๋ ํ๋ ์์ํฌ๋ MIT ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ
๋๋ค. [๋ผ์ด์ ์ค](LICENSE.md) ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.