๐ 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
๋๊ธ