λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ‘¨‍πŸ’» web.dev/node

[NPM] npm i κ³Ό npm ci … 차이점은?

by HandHand 2022. 6. 18.

πŸ“Œ npm i (npm install)

npm i(npm install) λŠ” ν”„λ‘œμ νŠΈμ— ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

npm i λŠ” 크게 두가지 λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

1️⃣ νŠΉμ • νŒ¨ν‚€μ§€ μ„€μΉ˜

$ npm install "package-name"

νŠΉμ • νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•  경우 npm i (name) κ³Ό 같은 ν˜•μ‹μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

이외에도 μ‚¬μš© κ°€λŠ₯ν•œ λͺ…λ Ήμ–΄ ν˜•μ‹μ΄ 정말 λ‹€μ–‘ν•œλ°, μžμ„Έν•œ λ‚΄μš©μ€ κ³΅μ‹λ¬Έμ„œ λ₯Ό μ°Έμ‘°ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

 

2️⃣ ν”„λ‘œμ νŠΈκ°€ μ˜μ‘΄ν•˜κ³  μžˆλŠ” λͺ¨λ“  νŒ¨ν‚€μ§€ μ„€μΉ˜

$ npm install

νŠΉμ • νŒ¨ν‚€μ§€λͺ…을 λͺ…μ‹œν•˜μ§€ μ•Šμ„ κ²½μš°μ—λŠ” package.json 에 λͺ…μ‹œλ˜μ–΄μžˆλŠ”

λͺ¨λ“  의쑴 νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•΄ node_modules 에 μ μž¬ν•˜λŠ” 것이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

πŸ’‘ 두 λ°©μ‹μ˜ 곡톡점

두 방식 λͺ¨λ‘ package-lock.json 을 λ¨Όμ € ν™•μΈν•˜κ³  λ§Œμ•½ μ‘΄μž¬ν•˜λ©΄

ν•΄λ‹Ή lockfile 을 μ΄μš©ν•΄μ„œ μ˜μ‘΄ν•˜κ³  μžˆλŠ” νŒ¨ν‚€μ§€ 정보λ₯Ό νŒŒμ•…ν•˜κ³  node_modules 에 μ„€μΉ˜ν•©λ‹ˆλ‹€.

그리고 node_modules λ‚˜ package.json 에 λ³€ν™”κ°€ 생기면

package-lock.json 을 μ—…λ°μ΄νŠΈν•˜μ—¬ 의쑴 νŒ¨ν‚€μ§€ 정보λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.

 

πŸ“Œ npm ci (npm clean-install)

npm ci λŠ” package-lock.json 에 λͺ…μ‹œλ˜μ–΄μžˆλŠ” νŒ¨ν‚€μ§€ 정보λ₯Ό ν™œμš©ν•΄μ„œ

μ™„μ „νžˆ μ •ν™•ν•œ λ²„μ „μ˜ νŒ¨ν‚€μ§€λ“€μ„ μ„€μΉ˜ν•΄μ„œ node_modules 에 μ μž¬ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ ν•΄λ‹Ή λͺ…λ Ήμ–΄λ‘œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜λŠ” λͺ¨λ“  κ°œλ°œμžλ“€μ΄

λ™μΌν•œ λ²„μ „μ˜ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŒμ„ 보μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ˜ν•œ npm i μ™€λŠ” λ‹€λ₯΄κ²Œ μ ˆλŒ€ package-lock.json 을 μˆ˜μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

그리고 이 lockfile 을 기반으둜 λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή 파일이 λ°˜λ“œμ‹œ ν•„μš”ν•©λ‹ˆλ‹€.

 

πŸ“Œ κ·Έλž˜μ„œ μ–Έμ œ, 어떀것을 μ¨μ•Όν• κΉŒμš”?

λ‹€μŒμ€ 자주 λ°œμƒν•˜λŠ” 각각의 κ²½μš°μ— λŒ€ν•΄μ„œ μ–΄λ–€ λͺ…λ Ήμ–΄λ₯Ό ν†΅ν•΄μ„œ

ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜λŠ” 것이 쒋을 지에 λŒ€ν•œ 개인적인 μ˜κ²¬μž…λ‹ˆλ‹€. πŸ˜€

1️⃣ μƒˆλ‘œμš΄ νŒ¨ν‚€μ§€λ₯Ό ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•  λ•Œ

npm install "package name" 을 μ‚¬μš©ν•΄μ„œ ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

2️⃣ 원격 μ €μž₯μ†Œμ˜ ν”„λ‘œμ νŠΈλ₯Ό λ‘œμ»¬μ— 초기 μ„€μ •ν•  λ•Œ

λ‹€λ₯Έ κ°œλ°œμžλ“€κ³Ό ν•¨κ»˜ μž‘μ—…ν•˜λŠ” ν”„λ‘œμ νŠΈμ˜ 초기 섀정을 진행할 λ•ŒλŠ”

npm ci λ₯Ό ν†΅ν•΄μ„œ ν˜„μž¬ μ €μž₯μ†Œμ˜ package-lock.json 을 기반으둜 νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

3️⃣ μžλ™ν™” ν…ŒμŠ€νŠΈ 및 CI/CD ν™˜κ²½

수 λ§Žμ€ λΉŒλ“œ κ³Όμ •μ—μ„œ package-lock.json 을 μˆ˜μ •ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄ npm ci λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

 

πŸ“Œ 참고자료

npm ci vs. npm installβ€Š-β€ŠWhich Should You Use in Your Node.js Projects?

Difference between npm i and npm ci in Node.js - GeeksforGeeks

λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€