๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programming/11. etc

005_npm ci, npm i

by @sangseophwang 2022. 5. 8.

๐Ÿ”ฅ ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ํ”„๋กœ์ ํŠธ ์„ค์น˜

 ์ž…์‚ฌํ•˜๊ณ  ๋‚˜์„œ ์ด๋ž˜์ €๋ž˜ ํšŒ์‚ฌ ์ƒํ™œ์— ์ ์‘ํ•˜๋˜ ์ค‘, ๋“œ๋””์–ด ์šฐ๋ฆฌ ํŒ€ ํ”„๋กœ์ ํŠธ ์„ค์น˜๋ฅผ ํ•˜๋Š” ์ˆœ์„œ๊ฐ€ ์ฐพ์•„์™”๋‹ค. ์ด์ „๊นŒ์ง€ yarn์ด๋ผ๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์œ„์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋‹ค ์˜ค๋žœ๋งŒ์— npm์œผ๋กœ ์„ค์น˜ํ•˜๋ ค๋Š”๋ฐ ์„ ์ž„ ๋ถ„๊ป˜์„œ 'npm i ๋Œ€์‹  npm ci๋กœ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”' ๋ผ๊ณ  ์š”์ฒญํ•ด์ฃผ์…จ๋‹ค. ๊ทธ๋™์•ˆ npm i๋งŒ ์•Œ๊ณ  ์žˆ๋˜ ๋‚ด๊ฒŒ ๋˜ ๋‹ค๋ฅธ ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋Š”๊ฒŒ ์‹ ๊ธฐํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ํ™•์ธํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

โšก๏ธ npm ci?

์šฐ์„  npm ci์˜ 'ci' ๋Š” ๋‹ค์Œ ์šฉ์–ด์˜ ์ค„์ž„๋ง์ด๋‹ค.

ci : clean install

๊ทธ๋ƒฅ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ํด๋ฆฐํ•˜๊ฒŒ ์„ค์น˜ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์Šจ ๋œป์ผ๊นŒ? ์ด ๋œป์„ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € package.json๊ณผ package-lock.json์— ๋Œ€ํ•ด ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

์šฐ์„  package.json์€ ํ”„๋กœ์ ํŠธ์˜ ์ •๋ณด๋ฅผ ์ •์˜ํ•˜๊ณ , ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๋ช…์‹œํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค. 

์ฆ‰, ๋‚ด๊ฐ€ ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€๋ช…๊ณผ ์„ค์น˜ํ•  ๋•Œ์˜ ๋ฒ„์ „์„ ์ ์–ด๋†“์€ ํŒŒ์ผ์ด๋‹ค. ์ด ํŒŒ์ผ ๋•๋ถ„์— Github์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐ›์•„ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋“ค์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ package.json์€ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ๋ช…ํ™•ํ•œ ๋ฒ„์ „ ๋Œ€์‹  version range๋กœ ํ‘œ๊ธฐํ•œ๋‹ค.

๐Ÿค” version range?

๐Ÿ‘ถ๐Ÿป : "๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์€ 3.15.1๋ฒ„์ „์ด์•ผ"  ๋ผ๊ณ  ๋งํ•˜๋Š” ๋Œ€์‹ 
๐Ÿ‘ถ๐Ÿป : "๋‚˜๋Š” 3.15.1๋ฒ„์ „ ์ด์ƒ, ๊ทธ๋ฆฌ๊ณ  3.16.0 ๋ฏธ๋งŒ์˜ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ• ๊ฑฐ์•ผ" ๋ผ๊ณ  ๋งํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
๋ฌผ๋ก  3.15.1์ฒ˜๋Ÿผ ๋”ฑ ์ •ํ•ด์„œ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
// version range ์˜ˆ์‹œ


// ํ‹ธ๋“œ (tilde)
"devDependencies": {
  "@vue/cli-service": "~4.3.0",
},

// 4.3.0  ์ด์ƒ 4.4.0 ๋ฏธ๋งŒ
// 4.4.0 ๋ฏธ๋งŒ์˜ ํŒจ์น˜ ๋ ˆ๋ฒจ ๋ณ€๊ฒฝ์„ ํ—ˆ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ


// ์บ๋Ÿฟ(caret)
"dependencies": {
  "vue": "^2.6.11"
}

// 2.6.11 ์ด์ƒ 3.0.0 ๋ฏธ๋งŒ
// 3.0.0 ๋ฏธ๋งŒ์˜ ๋งˆ์ด๋„ˆ, ํŒจ์น˜ ๋ณ€๊ฒฝ์„ ํ—ˆ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ

์ด๋ ‡๊ฒŒ ๋ช…ํ™•ํ•œ ๋ฒ„์ „์ด ์•„๋‹Œ ๋ฒ”์œ„๋กœ์จ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘ถ๐Ÿป : ํ”„๋กœ์ ํŠธ ๋ฐ›์•˜๋Š”๋ฐ ์™œ ์ž‘๋™์ด ์•ˆ๋˜์ง€??
๐Ÿ‘ง๐Ÿป : ์—ฅ ์ง„์งœ?? ๋„ˆ ๋ฒ„์ „์ด ๋ช‡์ธ๋ฐ?
๐Ÿ‘ถ๐Ÿป : ๋‚˜ 3.15.2 !!
๐Ÿ‘ง๐Ÿป : ์–ด.. ๋‚˜๋Š” 3.15.1์ธ๋ฐ...? ์™œ ์ด๋ ‡๊ฒŒ ์„ค์น˜๋œ๊ฑฐ์ง€?

๋ฌผ๋ก  ์ด๋Ÿฐ ๋‹จ์ ๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. package.json์— ํŒจํ‚ค์ง€ ๋ฒ„์ „๋ช…์„ ์ •ํ™•ํžˆ ๋ช…์‹œํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด,
ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํŒจํ‚ค์ง€์˜ ์ค‘์š”ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ ๋งˆ๋‹ค ํ”„๋กœ์ ํŠธ์˜ package.json์— ์ ํ˜€์žˆ๋Š” ๋ฒ„์ „๋„
์ˆ˜์ •์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ํฌ๊ณ  ์ž‘์€ ํŒจํ‚ค์ง€๋“ค์˜ ๋ฆด๋ฆฌ์ฆˆ์— ๋Œ€ํ•ด ํ•ญ์ƒ ์ถ”์ ํ•˜๊ณ  ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์—„์ฒญ๋‚œ ๊ท€์ฐฎ์Œ์„
version range๋กœ ๋ช…์‹œํ•จ์œผ๋กœ์จ, ์ด๋ฅผ ํ•ด๊ฒฐํ•ด์ค€๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ํˆฌ์ž…๋˜๊ณ  ๋ชจ๋‘๊ฐ€ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ํ•ด์•ผํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ์–ด์จŒ๋“  ๊ฐ™์€ ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด package-lock.json์ด ํ•„์š”ํ•ด์ง„ ๊ฒƒ์ด๋‹ค.

 

package.json ์„ ์ฝ์–ด ์˜์กด์„ฑ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ 
package-lock.json ์„ ํ†ตํ•ด ์„ค์น˜ํ•  ์˜์กด์„ฑ์˜ ๋ฒ„์ „์„ ์•Œ๋ ค์ค€๋‹ค.

๋ช…ํ™•ํ•œ ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์ด ์ ํ˜€์žˆ๋Š” package-lock.json์„ ํ™œ์šฉํ•ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋“œ๋””์–ด ์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„๋ณด๊ณ ์ž ํ•˜๋Š” npm ci์ธ ๊ฒƒ์ด๋‹ค.

 

npm ci๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.

 

  • package-lock.json ์ด ๋ฌด์กฐ๊ฑด ์กด์žฌํ•ด์•ผ๋งŒ ํ•˜๊ณ , ๋งŒ์•ฝ ์—†์œผ๋ฉด ์—๋Ÿฌ๋ฅผ ๋‚ธ๋‹ค.
  • package-lock.json ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜์กด์„ฑ์„ ์„ค์น˜ํ•˜๊ณ , package.json ์€ ๋ฒ„์ „ ๋งค์นญ ๋ฐธ๋ฆฌ๋ฐ์ด์…˜ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    ์ฆ‰, package-lock.json ๊ณผ package.json ์‚ฌ์ด์˜ ๋ฒ„์ „์ด ๋งค์นญ์ด ์•ˆ๋˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋‚ธ๋‹ค.
  • npm ci ์‹คํ–‰ํ•˜๋ฉด ๋จผ์ € node_modules ์‚ญ์ œํ•œ ํ›„, ์˜์กด์„ฑ์„ ํ•œ๋ฒˆ์— ์„ค์น˜ํ•œ๋‹ค.

๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜์ž๋ฉด node_modules๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋ฅผ ์‚ญ์ œํ•œ ํ›„ ์žฌ์„ค์น˜๋ฅผ ํ•˜๋ฉฐ,
package.json์— ์ ํ˜€์žˆ๋Š” ๋ฒ„์ „๊ณผ package-lock.json์˜ ๋ฒ„์ „์„ ๋น„๊ตํ•œ ๋‹ค์Œ ๋งค์นญ๋œ๋‹ค๋ฉด
package-lock.json์„ ๊ธฐ์ค€์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด ๋‘˜์ด ๋‹ค๋ฅด๋‹ค๋ฉด ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์—๋Ÿฌ๋ฅผ ๋‚ด๋ณด๋‚ธ๋‹ค.

 

์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๋Š” ๋ชจ๋“  ์ธ์›์ด ์™„์ „ํžˆ ๋™์ผํ•œ ๋ฒ„์ „์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ ๋กœ yarn์—๋„ ์ด์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
yarn install --frozen-lockfile

 

๐Ÿซต๐Ÿป ๊ฒฐ๋ก 

 ํ”„๋กœ์ ํŠธ๋Š” ํ˜ผ์ž ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํŠนํžˆ ํšŒ์‚ฌ์˜ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ฑฐ๋‚˜ ํŒ€์œผ๋กœ์จ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•  ๋•Œ ๋ชจ๋‘๊ฐ€ ํ•œ ์‚ฌ๋žŒ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ์ตœ๋Œ€ํ•œ ๋งž์ถœ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ํ™˜๊ฒฝ์˜ ์ฐจ์ด๋กœ ์ธํ•ด ํ”„๋กœ์ ํŠธ์— ์ง€์žฅ์ด ๊ฐ„๋‹ค๋ฉด ์ด๋ณด๋‹ค ์‹œ๊ฐ„์ด ์•„๊นŒ์šธ ์ˆ˜๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค. '์‹œ์ž‘์ด ๋ฐ˜์ด๋‹ค' ๋ผ๋Š” ๋ง์ด ์žˆ๋“ฏ ์ดˆ๋ฐ˜์— ์ด๋Ÿฐ ์„ธํŒ…์— ์กฐ๊ธˆ๋งŒ ์‹ ๊ฒฝ์“ด๋‹ค๋ฉด ์•ž์œผ๋กœ์˜ ๊ฐœ๋ฐœ ๋ผ์ดํ”„์— ํ–‰๋ณต๋งŒ์ด ๊นƒ๋“ค ๊ฒƒ์ด๋‹ค.

 

 

์ถœ์ฒ˜
https://velog.io/@songyouhyun/Package.json%EA%B3%BC-Package-lock.json%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://docs.npmjs.com/cli/v8/commands/npm-ci
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€