๐ npm๊ณผ caret, tilde, ํจํค์ง ์ค์นํ๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
npm์ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง ๋งค๋์ ๋ค. Node.js์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋๋ค์ ํจํค์งํํด์ ๋ชจ์๋ ์ ์ฅ์ ์ญํ ๊ณผ ํจํค์ง ์ค์น ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ CLI(Command line Interface)๋ฅผ ์ ๊ณตํ๋ค. ์์ ์ด ์์ฑํ ํจํค์ง๋ฅผ ๊ณต๊ฐํ ์๋ ์๊ณ , ํ์ํ ํจํค์ง๋ฅผ ๊ฒ์ํ์ฌ ์ฌ์ฌ์ฉํ ์๋ ์๋ค.
๋ด๊ฐ ๋ค๋๋ ํ์ฌ์์๋ npm ํจํค์ง๋ฅผ ์ง์ ๋ง๋ค์ด ์ฌ์ฉํ๊ณ ๊ด๋ฆฌํ๋ค.(npm ํจํค์ง ๋ณด๋ฌ๊ฐ๊ธฐ) ์ทจ์
์ค๋นํ ๋ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด ํญ์ ํจํค์ง === ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์ง์ ํจํค์ง๋ฅผ ๋ง๋ค๊ณ ๋ฒ์ ์ ๊ด๋ฆฌํด์ผ ํ๋ค ๋ณด๋ ๊น๋ค๋ก์ด ๊ฒ์ด ํ๋์ด ์๋์๋ค. ๊ทธ๋์ ํจํค์ง ๋ฒ์ ์ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ๋ค์ ํ์
์ ์ ์ฉํ ๋ ๊น๋จน์ง ์๊ธฐ ์ํด ๊ธ์ ๋จ๊ธด๋ค. ์ฐ๋ฆฌ๊ฐ ํ๋ก์ ํธ๋ฅผ ๋ง์ง ๋ package.json์ ํจํค์ง๋ฅผ ์ค์นํ๋๋ฐ, ์ด๋ ํจํค์ง์๋ ๋ค์์ฒ๋ผ ๋ฒ์ ์ด ๋ช
์๋์ด์๋ค.
// package.json
"typescript": "3.8.3"
"lint-staged": "^8.1.1",
"nodemon": "~1.19.1",
์๋ฅผ ๋ค์ด, typescript์ ๊ฒฝ์ฐ์๋ 3.8.3์ด๋ผ๊ณ ๋ช
์๋์ด์๋๋ฐ ์ด๋ฌํ ์ซ์๋ฅผ semantic versioning์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ฒ์ ์ ์ผ์ชฝ๋ถํฐ ์ฐจ๋ก๋๋ก ์ฃผ(ไธป) ๋ฒ์ (Major), ๋ถ(้จ) ๋ฒ์ (Minor), ์(ไฟฎ) ๋ฒ์ (Patch)๋ผ๊ณ ๋ถ๋ฅธ๋ค. Major๋ ๊ธฐ์กด ๋ฒ์ ๊ณผ ํธํ๋์ง ์๊ฒ API๊ฐ ๋ฐ๋๋ฉด ๋ณ๊ฒฝ๋๊ณ , ๊ธฐ์กด ๋ฒ์ ๊ณผ ํธํ๋๋ฉด์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋๋ Minor๋ฅผ ์ฌ๋ฆฌ๊ณ , ๊ธฐ์กด ๋ฒ์ ๊ณผ ํธํ๋๋ฉด์ ๋ฒ๊ทธ๋ฅผ ์์ ํ ๊ฒ์ด๋ผ๋ฉด Patch๋ฅผ ์ฌ๋ฆฐ๋ค.

์๋จ codeBlock์ ํจํค์ง ๋ฒ์ ์ ๋ณด๋ฉด ๋จ์ํ ์ซ์๋ง ๋ถ์ฌ์๋๊ฒ ์๋๋ผ ์ซ์ ์์ ^ ํน์ ~๊ฐ ๋ถ์ด์๋๋ฐ, ^๋ caret(์บ๋ฟ)์ด๋ผ ๋ถ๋ฅด๊ณ , ๋ฌผ๊ฒฐํ์์ธ ~๋ tilde(ํธ๋)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ค์ ๊ฐ๊ฐ ํน์ง์ด ์๋๋ฐ ^๋ Compatible with version์ ๋ปํ๋ฉฐ ๋์ค์ ์
๋ฐ์ดํธ๋ฅผ ํ๋๋ผ๋ major๊ฐ์ด ๋ณํ์ง ์๋ ์ต๋ ๋ฒ์ ์ ์ค์นํ๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด "lint-staged": "^8.1.1" ํจํค์ง๋ฅผ ์
๋ฐ์ดํธ ํ๊ฒ๋๋ฉด major๊ฐ์ด ๋ณํ์ง ์๋ ์ต์ ๋ฒ์ ์ธ 8.2.1์ ๋ด๋ ค๋ฐ๊ฒ ๋๋ค. ์ด๋ฅผ ์ํด ๊ฐ๋จํ ์คํ์ ์งํํ๋๋ฐ, npm init -y๋ก package.json์ ๋ง๋ค๊ณ npm i lint-stages@8.1.1๋ก 8.1.1๋ฒ์ ์ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ๋์ npm i lint-stages๋ฅผ ์งํํ๋ 8.2.1๋ฒ์ ์ ๋ฐ์๋ค. ์ด๋ฅผ ํตํด ํจํค์ง๋ฅผ ์
๋ฐ์ดํธํ๊ฒ ๋๋ฉด ^์ ํด๋น major๋ฅผ ์ ์ธํ ๋ฒ์ ์ ์ต์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ๋๋ค๋ ์ ์ ์ ์ ์์๋ค.


๋ค์์ผ๋ก ~๋ tilde(ํธ๋)๋ Approximately equivalent to version์ ๋ปํ๋ฉฐ, ํจํค์ง ๋ฒ์ ์ค์น ๋ช
๋ น์ด๋ฅผ ์ด๋๊น์ง ์
๋ ฅํ๋์ง์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์๋ฅผ ๋ค์ด npm i nodemon@~1์ด๋ผ๊ณ ์์ฑํ๋ฉด ๋ฒ์ ์ major๊น์ง๋ง ๋ช
์ํ๊ธฐ ๋๋ฌธ์ minor์ patch ๋ณ๊ฒฝ์ ํ์ฉํ๋ค. ๊ทธ๋์ ํ๋จ ์ฌ์ง์ฒ๋ผ major๋ 1์ด๊ณ ๋๋จธ์ง๋ ์ต์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ๋ค. ์ด๋ 1.x.x์ ๊ฐ๋ค.

๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก npm i nodemon@~1.10์ ๋ค์ด๋ฐ์ผ๋ฉด patch๋ณ๊ฒฝ์ ํ์ฉ ํ ๊ฒ์ด๊ณ , ์ด๋ 1.10.x์ ๊ฐ๋ค.
์ฌ๋ด์ผ๋ก ^ ํน์ ~๋ฅผ ๋ถ์ด์ง ์๊ธฐ ์ํด npm install nodemon@1.10.1์ ์
๋ ฅํ๊ณ package.json์ ๋ณด๋ฉด ์๋์ผ๋ก caret์ด ๋ถ์ฌ์๋๋ฐ, ์ด๋ npm save-prefix๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ^์ผ๋ก ์ค์ ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ, default๊ฐ์ ^ ๋์ --save-exact๋ ~๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด npm config set save-prefix '--save-exact' ํน์ npm config set save-prefix '~'์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค. ๋ณ๊ฒฝ๋ ๋ด์ฉ์ npm config set ls -l ๋ช
๋ น์ด์์ save-prefix ํค ๊ฐ์์๋ ํ์ธํ ์ ์๋ค. ๋ํ, npm config๋ฅผ ๊ฑด๋ค์ง์๊ณ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ๋ฒ์ ์ ๋ฐ๊ณ ์ถ๋ค๋ฉด npm i --save-exact <package>@<version>์ ์
๋ ฅํ๋ฉด ๋๋ค.
Reference
๋๊ธ