October 21, 2020
μ΄μ this ν€μλλ call, apply, bind λ₯Ό νμ΅νκ³ λ¨Έλ¦¬κ° μΌμΌν λλμμ μ€λ HA κ³Όμ λ₯Ό ESlint λ₯Ό μ¬μ©ν΄ 리ν©ν λ§ νκ³ κΉνλΈλ‘ μ¬λ¦¬λ μ€νλ¦°νΈλ₯Ό μ§ννλ€.
νμ΄λκ³Ό μΆκ° μκ° κΉμ§ ν¨κ» ν΄μ λ¬Έμ λ₯Ό ν΄κ²°ν΄μ λλ΄ κ³Όμ λ₯Ό μ μΆν΄μ λΏλ―ν λλμ΄λ€. μ€λμ κ³Όμ μ μμ§ μκ³ μ€λ κΈ°μ΅νκΈ° μν΄ λΈλ‘κ·Έλ₯Ό λ¨κ²¨λ³Έλ€.
μ΄μ ν¬ν¬ λ° ν΄λ‘ ν΄μ¨ νλ‘μ νΈμμ pre-hiring-assessment λλ ν 리λ₯Ό ν΅ν΄ ν리 μ½μ€ μνμ μ μΆν HA μ½νμ 7λ¬Έμ λ₯Ό ESlint λ₯Ό κ°μ§κ³ 리ν©ν λ§ νκ³ μ¬κΈ°μ μΆκ°λ‘ νμ΄μ git simple workflow λ₯Ό λ°°μ λ κ²μ μ μ©ν΄μ μλ‘ μν μ λ°κΎΈμ΄ κ°λ©° κΉνλΈμ μ¬λ¦° κΈ°λ‘μ λ¨κΈ°κ³ μ΅μ’ PR νλ κ³Όμ μ΄λ€.
λ¨μΆμ΄μ λ¨μΆμ΄κ° κΈ°λ₯νλ scripts λΆλΆμ 보면 urclass μ μ νμλ lint κ° μ ν μκ³ λ 보면 eslint.. νλ©΄μ μ€νλλ λΆλΆμ μμ±λμ΄ μλ€. νμ§λ§ devDependency λ₯Ό 보면 eslint κ° μλ κ²μΌλ‘ 보μ μ€μΉκ° λμ΄ μμ§ μλ€.
μ΄μ μ΄κ²μ μ€μΉν΄μΌ νλ€.
// κΈ°μ΅νκ³ λμ΄κ°κΈ°!
dependency λ νλ‘μ νΈκ° λμκ°κΈ° μν΄ λ°λμ νμν λͺ¨λλ€μ λͺ
μΈ.
devDependency λ μ€μ νλ‘μ νΈ λμμ μ§μ μ μΈ μν₯μ μ£Όμ§λ μμ§λ§,
κ°λ°νλ νκ²½μμ νμνκ±°λ λμμ μ£Όλ λͺ¨λλ€μ λͺ
μΈ μ΄λ€.
https://eslint.org/docs/user-guide/getting-started
곡μ λ¬Έμ λ§ν¬λ₯Ό ν΅ν΄ μ€μΉλ₯Ό μ§ννλ€. Linter λ μ½λμ λμ΄μ°κΈ°λ μ€λ°κΏ λ±μ κ·μΉλ€μ λ§μΆλ λ°μ λμμ΄ λλ€λ λͺ¨λμ΄λ€.
// 1. ESLint λ npm μ±μ€ν μ΄μμ μ€μΉνλ€.
npm install eslint --save-dev
// save dev λ package.json μ devDependency μ μ μ₯νκ² λ€λ λ».
// 2. κ΅¬μ± νμΌ μ€μ μ μν΄ λ€μκ³Ό κ°μ λͺ
λ Ήμ΄λ₯Ό ν°λ―Έλμ μ
λ ₯νλ€.
npx eslint --init
κ·Έλ¬λ©΄ ν°λ―Έλμ μ§λ¬Έμ΄ λμ€κ³ κ·Έκ²μ μλμ κ°μ΄ μ νν΄μ μ§ννλ€.
κ·Έλ κ² μλ£ λλ©΄ νλ‘μ νΈ λ΄μ .eslintrc.js λλ .eslintrc.json μ κ°μ μ€μ νμΌμ΄ λ§λ€μ΄ μ§λ€.
μ€μ νμΌμ μλμ κ°μ΄ μκ²Όλ€.
module.exports = {
env: {
commonjs: true,
es2021: true,
node: true,
mocha: true, // μλλ μμλλ° lint μκ² mocha λ₯Ό μ¬μ©νκ³ μλ νκ²½μ΄λΌλ κ²μ μλ €μ£Όμλ€!
browser: true,
},
extends: 'eslint:recommended',
parserOptions: {
ecmaVersion: 12,
},
rules: {},
}
extends: βeslint:recommendedβ, λ‘ λ―Έλ£¨μ΄ λ³΄μ λλμ eslint μμ μΆμ²νλ κΈ°λ³Έ μ€μ μ΄ μΈν λμμμ μ§μν μ μλ€. μμ μ½λμ²λΌ μ²μμ rules λΆλΆμ΄ λΉμ΄ μλ€.
μ¬κΈ°λ κΈ°λ³Έμ€μ μν νλ¬μ€ λ΄κ° μ μν μ€μ μ΄ ESlint κ²μ¬ν λ μκ±°λ ν리λ€λ©΄ error λλ κ²½κ³ νΉμ 무μλ₯Ό μ μν μ μλ κ³³μ΄λ€.
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "double"]
}
μλ₯Ό μμλ‘ λ³΄λ©΄ semi μ½λ‘ λΉΌλ¨ΉμΌλ©΄ νμ μλ¬λ₯Ό μΌμΌν€κ³ , quotes λ λλΈ μ½νΈλ₯Ό μ°μ§ μμΌλ©΄ μλ¬λ₯Ό μΌμΌν€λ κ²μ μλ―Ένλ€.
μ€μ μ λ κ² νλ©΄ μ€λ₯κ° μμ² λκΈ° λλ¬Έμ λ£μ§ μμλ€.
μ΄μ npm run lint λ₯Ό ν°λ―Έλμ μΉλ©΄ 무μν μλ¬ λ©μμ§λ₯Ό νμΈν μ μλλ°, λμ κ²½μ°λ μ½λ© 컨벀μ μ μ§ν€μ§ μμ κ²½μ°μ μλ¬ λ³΄λ€λ,
error 'test4' is defined but never used no-unused-vars
μ΄λ° μλ¬κ° λλΆλΆμ΄μλ€. κ·Έλμ κ²μν΄λ³΄λ μ΄λ° κ²½μ°λ ν¨μ λλ λ³μκ° μ μΈλ§ λκ³ μ¬μ©μ΄ λμ§ μμ κ²½μ°μ λμ°λ μλ¬μ΄λ―λ‘ λ¨μ κ²½κ³ λ‘ λ°κΎΈκ±°λ μλ¬λ₯Ό λμ°μ§ μκ² ν μ μλ€κ³ νλ€. κ·Έλμ μ°Ύμλ΄€λ€.
.eslintrc.js μ€μ νμΌμμ rules λ₯Ό μλμ κ°μ΄ μμ νλ€.
module.exports = {
env: {
commonjs: true,
es2021: true,
node: true,
mocha: true,
browser: true,
},
extends: 'eslint:recommended',
parserOptions: {
ecmaVersion: 12,
},
rules: {
'no-unused-vars': 0,
},
}
κ·Έλ¦¬κ³ npm run lint λ₯Ό ν΅ν΄ μ€λ₯λ₯Ό ν΄κ²°ν΄ 보μλ€.
μλμ κ°μ΄ μκ·Έμ λ°°μ΄ μ¬νμ μ μ©νλ©΄μ νμ΄λκ³Ό 리ν©ν λ§ νλ κ³Όμ μ κ±°μ³€λ€. λ΄κ° μμ±ν μ½λμ λΉν΄ νμ΄λμ μ½λκ° μ§§κ³ κ°λ μ±μ΄ μ’μμ νμ΄λμ μ½λλ₯Ό μμ£Όλ‘ μ§ννλ€.
λ΄κ° νμ΄λμκ² λμμ λ릴 μ μμλ μ½λλ μμ΄λ¬λ νκ²λ 7λ² μ΄μλ€.
https://dev-seolleung2.netlify.app/development/Git%20WorkFlow/
μμ λ§ν¬μ βBasic Git Workflow - 1.β λΆλΆμ λ°λΌ νλ©΄μ μ§ννμ΄μΌ λλ κ² μ μ μ΄μ§λ§
λ³Έμ μλκ² νμ΄λκ³Ό λλ κ°μ ν΄λ‘ λ°μ νλ‘μ νΈμμ νμ΄λ λ°λ‘ λ λ°λ‘ μμ λ§μ 리ν©ν λ§ μ½λλ₯Ό λ£κ³ μ»€λ° νΈμλ₯Ό μλ£ ν μν μλ€.
μλλλ‘λΌλ©΄ κ°μ ν΄λ‘ λ°μ μνμμ λλΌμ΄λ² ν λͺ μ΄ λ¬Έμ νλλ₯Ό 리ν©ν λ§ μμ ν΄μ νΈμνλ©΄, λ€μ λ°ν€μ μ΄μ΄λ°λ μ¬λμ΄ μ΄μ λλΌμ΄λ²μ ν΄λΉ μ μ₯μλ₯Ό 리λͺ¨νΈ ν΄μ pull λ‘ κ°μ Έμ¨ λ€μ μν μ λ°κΎΈμ΄ μ§ννμ΄μΌ νλλ° λ§μ΄λ€.
νμ§λ§ μ¬λ°λ κ±Έ μλν΄ λ³Ό μ μμλ€.
κ·Έκ²μ λ°λ‘ νμ΄λμκ² λ΄ λ ν¬μ μ€μ μ°κΈ° κΆνμ μ£Όλ κ²μ΄λ€.
λ°λλ‘ νμ΄λλ λμκ² μ€μ μ°κΈ° κΆνμ μ£Όμ΄μΌ νλ€.
νμ΄λκ³Ό λ κ°μ μμ κ°μ΄ μλ‘μκ² λ΄ μ μ₯μμ λν βμ°κΈ°β μμ κΆνμ μ£Όκ³ , λ΄κ° νμ΄λμ μ μ₯μλ₯Ό ν΄λ‘ ν΄μμ HA μ½λλ₯Ό λͺκ°μ§ μμ νκ³ push νλ€.
git push origin master λ‘ μ§ν νκ³ νμ΄λμ μ μ₯μμ λ΄μμ΄ λ΄κ° μμ ν λ΄μ©μ λ°μνλ κ²μ νμΈν μ μμλ€.
pull request λ²νΌμ λλ₯΄λ©΄,
Able to merge. These branches can be automatically merged. λΌλ λ©μμ§κ° λ¨μ§ μκ³ μλ λ¨Έμ§κ° λμ§ μλλ€ λΌλ λΉ¨κ° λ¬Έμ₯μ νμΈνκ² λμλ€.
κ·Έλλ‘ pr μ νκ³ λ³΄λ©΄ μ΄λ€ λ¨μΆκ° μμλλ° κ·Έκ±Έ λλ₯΄λ©΄ μ΄μ μ¬ν, λ³κ²½ μ¬νμ΄ μλλ° κ·Έ λΆλΆμ κΉνλΈ μμμ μ§μ°κ³ λ€μ PR νλ ν΅κ³Όκ° λμλ€.
λΈλ‘κ·Έλ₯Ό μμ±νλ μμ€μ test02 λ²μμ ν¨μλ΄μ ν¨μλ₯Ό μμ±ν΄μ eslint κ° ν¨μ λ°κΉ₯μ μμ±νλΌκ³ μλ € 쀬λ€.
κ·Έλμ μμ νμ΄λμ μ½λλ₯Ό μ°Έκ³ ν΄μ κ°κ²°νκ² λ§λ€μ΄ λ²λ Έλ€.
κ·Έλ°λ° μλμ κ°μ μΆ©λ λ©μμ§κ° λ³λ€. μ΄λ―Έ merged λ₯Ό ν΄μ κ·Έλ°κ°.
μλ¬ λ©μμ§λ₯Ό 보λ μΆμ² ννΈμ λ€μκ³Ό κ°μ λ©μμ§κ° μμλ€.
hint: (e.g., 'git pull ...') before pushing again.
κ·Έλμ ν΄λ³΄λ μλμ κ°μ νλ©΄μΌλ‘ μ μ€νλμμμ νμΈνκ³ λ€μ PR μ λ λ € λ€μ μ μΆνλ€.
λ!!