Yarn: `--pure-lockfile`์„ `install`์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •

์— ๋งŒ๋“  2016๋…„ 10์›” 10์ผ  ยท  54์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: yarnpkg/yarn

_๊ธฐ๋Šฅ_์„ ์š”์ฒญํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด _๋ฒ„๊ทธ_๋ฅผ ๋ณด๊ณ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

_ํŠน์ง•_

ํ˜„์žฌ ํ–‰๋™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

install ๋ช…๋ น์— --pure-lockfile ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด node_modules๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” add/upgrade/remove ๊ฐ€ ์ข…์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ณ  install ๊ฐ€ lockfile์—์„œ node_modules๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๋‹ค์‹œ ๋นŒ๋“œํ•œ๋‹ค๋Š” ์˜๋ฏธ๋ก ์— ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ(ํ˜„์žฌ ์„ค์น˜๋œ ์›์‚ฌ์˜ ๋ฒ„์ „)์— ๋”ฐ๋ผ lockfile์„ ์ˆ˜์ •ํ•˜๋ฉด ์ผ๊ด€์„ฑ์ด ์ƒ์‹ค๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

yarn install ํ•  ๋•Œ yarn.lock์ด๋‚˜ package.json์„ ์“ฐ์ง€ ๋งˆ์„ธ์š”.
yarn.lock์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด yarn upgrade

node.js, ์›์‚ฌ ๋ฐ ์šด์˜ ์ฒด์ œ ๋ฒ„์ „์„ ์–ธ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค.

์‹ค 0.14

cat-feature needs-discussion

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์—ฌ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ํ’€๊ณ ์ž ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ผ๋“ค์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋ง์žฅ๋‚œ ์˜๋„ ์—†์Œ).

์ฒซ์งธ, ์‚ฌ๋žŒ๋“ค์€ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ œ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ด๋กœ ์ธํ•ด ๊ธฐ์กด ๋™์ž‘์˜ ์ผ๋ถ€๊ฐ€ ๋ฒ„๊ทธ๊ฐ€ ๋˜๋ฉฐ, ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๊ณง ๋‹ค๋ฃจ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์›๋ž˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์—์„œ.

ํ™˜๊ฒฝ(ํ˜„์žฌ ์„ค์น˜๋œ ์›์‚ฌ์˜ ๋ฒ„์ „)์— ๋”ฐ๋ผ lockfile์„ ์ˆ˜์ •ํ•˜๋ฉด ์ผ๊ด€์„ฑ์ด ์ƒ์‹ค๋ฉ๋‹ˆ๋‹ค.
์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์›์‚ฌ ์„ค์น˜ ์‹œ yarn.lock ๋˜๋Š” package.json์„ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
yarn.lock์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด yarn upgrade๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๋” ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์˜ˆ์ƒ๋˜๋Š” ์˜๋ฏธ๋ก ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • package.json ์ด yarn.lock ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์ดํ›„๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ yarn.lock ๋Š” ์ง„์‹ค์˜ ์†Œ์Šค์ด๋ฏ€๋กœ ์—…๋ฐ์ดํŠธํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ์šฐ package.json ์ง€๋‚œ ์ดํ›„์— ๋ณ€๊ฒฝ๋œ yarn.lock ๋ณ€๊ฒฝ ์—…๋ฐ์ดํŠธ yarn.lock ๋งŒ์กฑ ๋„ˆ๋ฌด package.json ๋ฐ ๊ฐฑ์‹  node_modules .
  • yarn update ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋‹ค์‹œ ํ•ด๊ฒฐํ•˜๊ณ  package.json ๋ฅผ ์ถฉ์กฑํ•˜๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ €์žฅ์†Œ๊ฐ€ ๋จธ์‹  ์—์„œ yarn.lock ๊ฐ€ ์ฒดํฌ์ธ๋œ ๊ฒฝ์šฐ, yarn์€ ํ•ญ์ƒ ์ด๋ฅผ ์†Œ์Šค๋กœ ์ทจ๊ธ‰ํ•ด์•ผ ํ•˜๋ฉฐ yarn.lock ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ ํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ ๋‹จ๊ณ„๋กœ ์ง์ ‘ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํ˜„์žฌ yarn์˜ ๋™์ž‘์ด ์•„๋‹Œ ํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


@esphen ์€ ๋‹ค์Œ

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค. ์ „์ฒด ์ž ๊ธˆ ํŒŒ์ผ ๊ฐœ๋…๊ณผ ์ƒ๋ฐ˜๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— yarn install์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ„์ „์„ ์ž ๊ทธ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ์ด ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ ๊ธฐ์กด์˜ ์ž ๊ธˆ ํŒŒ์ผ์ด ์—ฌ์ „ํžˆ ์ตœ์‹  ์ƒํƒœ๋ผ๋ฉด ์›์‚ฌ๊ฐ€ ์ƒˆ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ณ€๊ฒฝ ์ž‘์—…๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋Š” @bestander ์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์ถ”๊ฐ€/์—…๊ทธ๋ ˆ์ด๋“œ/์ œ๊ฑฐ).

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋Š” package.json ๋Œ€ํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด yarn.lock ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” package.json ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด yarn.lock ์˜ํ•ด ๋งŒ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด yarn.lock ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

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

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


@Guuz ๋Š” ๋‹ค์Œ๊ณผ

๊ทธ๋ž˜์„œ, ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด :
yarn์€ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๊ณ  ์ž ๊ธˆ ํŒŒ์ผ๋„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. CI ์„œ๋ฒ„์—์„œ๋Š” yarn install --pure-lockfile?์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์งˆ๋ฌธ์€ ์ด ์Šค๋ ˆ๋“œ์—์„œ ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์ด ํ•œ ๊ฐ์ •์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

Cargo์—๋Š” " package.json ๊ฐ€ yarn.lock ์˜ํ•ด ๋งŒ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ํ•˜๋“œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค"๋ผ๋Š” --locked ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Bundler์—๋Š” ์œ ์‚ฌํ•œ ํ”Œ๋ž˜๊ทธ( --frozen )๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Heroku๊ฐ€ Bundler๋ฅผ ์ฑ„ํƒํ•  ๋•Œ ์ถ”๊ฐ€๋˜์–ด Gemfile ๋ฅผ ๋กœ์ปฌ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  Gemfile.lock ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์„ ๋•Œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋Š” ์ •์ƒ์ ์ธ ๊ฐœ๋ฐœ ์ค‘์— package.json ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ณ  ์›์‚ฌ์—์„œ yarn.lock ๊ฐ€ ๋™๊ธฐํ™” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๋ ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‹ค์‹œ, ์ง€์ •๋œ ๋ฒ„์ „์ด package.json ํ•ญ์ƒ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐํฌํ•  ๋•Œ package.json ๋ณ€๊ฒฝํ•˜๊ณ  ๋กœ์ปฌ yarn ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์œผ๋ฉฐ yarn.lock ์ฒดํฌ์ธ์„ ์žŠ์–ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๊ธฐ๋œ ๊ฒƒ์€ ๊ฑฐ์˜ ํ•ญ์ƒ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค yarn . ์ด๊ฒƒ์€ package.json ๋ฒ„์ „์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ ์‚ฌ์šฉ๋œ ์‹ค์ œ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งํ–ˆ๋˜ ์›์‚ฌ์˜ ๊ธฐ๋ณธ ๋ถˆ๋ณ€์„ฑ์„ ์œ„๋ฐ˜ํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.


@esphen ์€ ๋‹ค์Œ๊ณผ

์ œ ์ƒ๊ฐ์—๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋Š” ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์›์‚ฌ ์„ค์น˜๋กœ ํ˜ผ๋ž€ ์—†์ด ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

npm์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ๊ฐœ๋ฐœ์ž ์ธ์Šคํ„ด์Šค๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ–ˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์Šคํ„ด์Šค๋Š” ์ผ์‹œ์ ์ธ ์ข…์†์„ฑ์œผ๋กœ ์ธํ•ด ๋ฒ„์ „์ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๋ฒ„์ „์œผ๋กœ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ semver๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” yarn์ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ yarn install --pure-lockfile ์„ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋นŒ๋“œ๋  ๊ฒƒ์ด๋ผ๊ณ  100% ํ™•์‹ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค.

yarn install --pure-lockfile ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ ๋‚ด๋ถ€์˜ ๋ฒ„์ „์ด package.json ์ง€์ •๋œ ๋ฒ„์ „๊ณผ ์ถฉ๋Œํ•˜๋”๋ผ๋„ ์ž ๊ธˆ ํŒŒ์ผ์ด ์กด์ค‘๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์žŠ์–ด๋“ค์ด ์ฒดํฌ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฒซ ๋ฒˆ์งธ ์žฅ์†Œ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค yarn.lock ๋ฐ›๋Š” ์‚ฌ๋žŒ ๋ณ€๊ฒฝ ํ•œ ํ›„ package.json .

ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์˜ ๋˜ ๋‹ค๋ฅธ ์—ญํ• ์€ ํ”„๋กœ์ ํŠธ์— ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์˜ค๋ž˜๋œ ๋ฒ„์ „์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์›์‚ฌ๋ฅผ ์‚ดํŽด๋ณธ ๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜์—ฌ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์šฐ๋ฐœ์ ์ธ ์ž ๊ธˆ ํŒŒ์ผ ์ปค๋ฐ‹์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ git commit -a๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•˜๋Š” ๋Œ€์‹  ์ง€์ •๋œ ๋ฆด๋ฆฌ์Šค ๊ธฐ๊ฐ„์— ๋ฒ„์ „์„ ๋ฒ”ํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ถŒํ•œ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

package.json ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ œ ์ƒ๊ฐ์—๋Š” yarn.lock ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ๋ฒ„๊ทธ์˜ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ๊ฐ€ ์›๋ž˜ ๋ณด๊ณ ์„œ์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

lockfile์€ ํ™˜๊ฒฝ(ํ˜„์žฌ ์„ค์น˜๋œ yarn์˜ ๋ฒ„์ „)์— ๋”ฐ๋ผ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜ค๋ฅ˜์ด๋ฉฐ ์ˆ˜์ •๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ์Šค๋ ˆ๋“œ์—์„œ @thejameskyle ์€ ๋‹ค์Œ๊ณผ

์ž…๋ ฅ์ด package.json์ด๊ณ  ์ถœ๋ ฅ์ด yarn.lock์ธ ๋ฉ”๋ชจ์ด์ฆˆ ํ•จ์ˆ˜๋ฅผ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”.

๊ทธ๊ฑด ๋‚ด๋ณด๊ธฐ์—, ์ •ํ™•ํžˆ ์˜ฌ๋ฐ”๋ฅธ ์ •์‹  ๋ชจ๋ธ์ด๋‹ค ( " yarn.lock ์™€ ๊ฒฝ์šฐ์—๋งŒ ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค package.json ๋ณ€๊ฒฝ"), ๊ทธ๋ฆฌ๊ณ  ์ถ”์ƒํ™” ๋ˆ„์ˆ˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.


@adamchainz ๋Š” ๋‹ค์Œ๊ณผ

์œ„์˜ ์ถ”๊ฐ€ ์ •๋ณด: ์šฐ๋ฆฌ ๋นŒ๋“œ์—๋Š” ํ•˜์œ„ ์ข…์†์„ฑ์œผ๋กœ Github์˜ coffeescript๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. coffeescript๋Š” ์ผ๋ถ€ ์ปค๋ฐ‹์„ ํ‘ธ์‹œํ–ˆ๊ณ  ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ yarn install์„ ์‹คํ–‰ํ•˜์—ฌ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์—์„œ ์ˆ˜์ •๋œ yarn.lock์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์—:

๊ทธ๋Ÿฌ๋‚˜ ์œ„์—์„œ ๋ณด๊ณ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ github์—์„œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ๋™์ž‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” yarn์ด git sha๋ฅผ ์ž ๊ธด ๋ฒ„์ „์˜ git ์ข…์†์„ฑ์˜ ์ผ๋ถ€๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Cargo์™€ Bundler๋Š” ๋ชจ๋‘ ์ž ๊ธˆ ํŒŒ์ผ๋กœ ์ง๋ ฌํ™”๋˜๋Š” "์ •ํ™•ํ•œ" ๋ฒ„์ „์˜ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. git ์†Œ์Šค์˜ ๊ฒฝ์šฐ "์ •ํ™•ํ•œ" ๋ฒ„์ „์€ SHA์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ƒˆ๋กœ์šด ํด๋ก ์„ ํ•  ๋•Œ ๊ทธ๋Ÿฐ ๋‹ค์Œ, ๋‹จ์ง€ package.json ๋ฐ yarn.lock ์‹คํ–‰ yarn , ๋‹น์‹ ์ด ํ•„์š”๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์–ป์„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธ git ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•  ๋•Œ ์ด ์ƒํ˜ธ ์ž‘์šฉ์„ ๋†“์ณค๋‹ค๋Š” ๊ฒƒ์„ ๊ณ ๋ฐฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์— ์ผ๋ถ€ SHA ์ถ”์ ์ด ์žˆ์ง€๋งŒ yarn install ๋Š” ์ˆ˜ํ™” ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ด๋ฅผ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


TL;DR

๋‚˜๋Š” yarn.lock ๊ฐ€ package.json ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” @thejameskyle ๋ฐ @kittens์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ €๋Š” ์‚ฌ์šฉ์ž๊ฐ€ package.json ์ง€์ •๋œ ๋ฒ„์ „์„ ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ •๋ ฌํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฌ๋‚˜ package.json ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ yarn.lock ์—์„œ ๋ถ€์ ์ ˆํ•œ ์ดํƒˆ์„ ์ผ์œผํ‚ค๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์—์„œ ์›์‚ฌ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
  • package.json ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ git ์ข…์†์„ฑ์ด ์—…๋ฐ์ดํŠธ๋˜์–ด ์ž ๊ธˆ ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Cargo์˜ --locked ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ package.json ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋œ yarn.lock ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ CI์—์„œ ๋นŒ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹คํŒจํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋ชจ๋“  54 ๋Œ“๊ธ€

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค. yarn install ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์ž ๊ธˆ ํŒŒ์ผ ๊ฐœ๋…๊ณผ ๋ชจ์ˆœ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ„์ „์„ ์ž ๊ทธ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ์ด ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

yarn install ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์„ฑ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ˆ„๊ตฐ๊ฐ€ yarn ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ์ด์ง€๋งŒ ํ•ญ์ƒ ์ž‘์„ฑํ•˜๋Š” ์ด์œ ๋Š” ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. add/upgrade/remove ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€๊ฒฝ ์ž‘์—…๋งŒ ์ž ๊ธˆ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋Š” @bestander ์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Yarn์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์ƒˆ ์ž ๊ธˆ ํŒŒ์ผ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ add/remove/upgrade ์—†์ด ์ž ๊ธˆ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ์˜ต์…˜์ด ์—ญ์ „ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

yarn install --save-lockfile

2016๋…„ 10์›” 17์ผ 18:53์— James Ide [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€/์ œ๊ฑฐ/์—…๊ทธ๋ ˆ์ด๋“œ ์—†์ด ์ž ๊ธˆ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ: Yarn์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์ƒˆ ์ž ๊ธˆ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ
๋ฒ„์ „?

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/yarnpkg/yarn/issues/570#issuecomment -254282256 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/ACBdWJLpdvqiwcBwqE4KB3x3f4oCn_nVks5q07YYgaJpZM4KSlSw
.

์ €๋„ ์ด๊ฒŒ ํ—ท๊ฐˆ๋ฆฝ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ธฐ๋ณธ ๋™์ž‘์— ๋Œ€ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Afaik, ๊ธฐ๋ณธ ๋™์ž‘์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ์ด์œ ๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
์•„์ด๋””์–ด๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ž ๊ธˆ ํŒŒ์ผ์„ "ํ•ญ์ƒ ๋…น์ƒ‰"์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

BTW ํ™๋ณด๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค

๊ทธ ์ด์œ ๋Š” ์›์‚ฌ๊ฐ€ ์›๋ž˜ install/add/upgrade ๋กœ ๋ถ„ํ• ๋œ ๋‹จ์ผ install ๋ช…๋ น์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด :

yarn ๋Š” ๋ชจ๋“  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๊ณ  ์ž ๊ธˆ ํŒŒ์ผ๋„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. CI ์„œ๋ฒ„์—์„œ๋Š” yarn install --pure-lockfile ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
์„ค์น˜ ์ค‘์— ์ž ๊ธˆ ํŒŒ์ผ์ด ์ˆ˜์ •๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์•„๋ฌด ๊ฒƒ๋„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—... Yarn์€ ์ž ๊ธˆ ํŒŒ์ผ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์ด ์ˆœ์ˆ˜ํ•˜๋ฉด ๋ณ„๋„์˜ ๋ช…๋ น์ด ๋˜๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@kittens ์ž ๊ธˆ ํŒŒ์ผ์€ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐ/์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๊นŒ? ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ์ดˆ๊ธฐ ์„ค์น˜๋ฅผ ํ•ญ์ƒ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์ด ์ˆœ์ˆ˜ํ•˜๋ฉด ๋ณ„๋„์˜ ๋ช…๋ น์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค์ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์˜ ์ฃผ์š” ๋ชฉํ‘œ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ํ•ญ๋ชฉ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ œ ์ƒ๊ฐ์—๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋Š” ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ yarn install ๋Š” ํ˜ผ๋ž€ ์—†์ด ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ๊ฐœ๋ฐœ์ž ์ธ์Šคํ„ด์Šค๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ–ˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์Šคํ„ด์Šค๋Š” ์ผ์‹œ์ ์ธ ์ข…์†์„ฑ์œผ๋กœ ์ธํ•ด ๋ฒ„์ „์ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๋ฒ„์ „์œผ๋กœ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ semver๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. yarn ๊ฐ€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ yarn install --pure-lockfile ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋นŒ๋“œ๋  ๊ฒƒ์ด๋ผ๊ณ  100% ํ™•์‹ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ฉด ๊ทธ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฝ์šฐ.

ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์˜ ๋˜ ๋‹ค๋ฅธ ์—ญํ• ์€ ํ”„๋กœ์ ํŠธ์— ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๋Š” yarn outdated ์—์„œ ์˜ค๋ž˜๋œ ๋ฒ„์ „์„ ํ™•์ธํ•œ ๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜์—ฌ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ˆ˜๋กœ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด git commit -a ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•˜๋Š” ๋Œ€์‹  ์ฃผ์–ด์ง„ ๋ฆด๋ฆฌ์Šค ๊ธฐ๊ฐ„์— ๋ฒ„์ „์„ ๋ฒ”ํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” @esphen์ด ๋งํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ˆœ์ˆ˜ํ•œ ๋™์ž‘์ด Yarn์˜ ๊ธฐ๋ณธ์ด ์•„๋‹ˆ๋ผ๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ผ๊ด€์„ฑ์ด Yarn์ด NPM์— ๋น„ํ•ด ๊ฐ–๋Š” ์ฃผ์š” ์ด์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ NPM์—์„œ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์ด์œ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฉฐ์น  ๋™์•ˆ yarn ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ํ›„ ๋นŒ๋“œ๋ฅผ ๊นจ๊ณ  ์™„์ „ํžˆ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์†”์งํžˆ --pure-lockfile ๊ฐ€ ๋งŽ์€ ๋ฌธ์„œ๋ฅผ ์ฝ์€ ํ›„ ๊ธฐ๋ณธ ๋™์ž‘์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , ์–ด๋–ป๊ฒŒ npm์ด shrinkwrap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€์ง€์— ๋Œ€ํ•ด ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ํ•ด์ฃผ์„ธ์š” :)

@ide ์‚ฌ๋žŒ์ด ๋‹จ์ง€ NPM์„ ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ๋œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ์ƒํ•ด package.json ๋ฐฉ๋ฒ•, yarn.lock ์—…๋ฐ์ดํŠธ ๋  ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์ˆ˜์ •๋˜๋Š” ์ž ๊ธˆ ํŒŒ์ผ๋กœ ์ด์–ด์ง€๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋Š” ์‹ฌ๊ฐํ•œ ํ•˜๋‚˜์ด๋ฉฐ ์ž‘์—…์ด ๋“ฑ์ด๋˜๊ณ , ์—…๋ฐ์ดํŠธ ๋  ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ธฐ์— ๋งŽ์€ ์˜ค๋ฒ„ ํ—ค๋“œ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ช…์‹œํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋ฅผ ์š”๊ตฌํ•˜์—ฌ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋‘ ๋ฒˆ์งธ ํด๋ž˜์Šค ์‹œ๋ฏผ์„ ์ˆ˜ํ–‰

์œ„์˜ ์ถ”๊ฐ€ ์ •๋ณด: ์šฐ๋ฆฌ ๋นŒ๋“œ์—๋Š” ํ•˜์œ„ ์ข…์†์„ฑ์œผ๋กœ Github์˜ coffeescript๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. coffeescript๋Š” ์ผ๋ถ€ ์ปค๋ฐ‹์„ ํ‘ธ์‹œํ–ˆ๊ณ  ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์—์„œ yarn install ๋งŒ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜์ •๋œ yarn.lock ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

diff --git a/foo/yarn.lock b/foo/yarn.lock
index ec667fa..bb1f6ae 100644
--- a/foo/yarn.lock
+++ b/foo/yarn.lock
@@ -930,9 +930,9 @@ code-point-at@^1.0.0:
   version "1.6.3"
   resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.6.3.tgz#6355d32cf1b04cdff6b484e5e711782b2f0c39be"

-"coffee-script<strong i="8">@github</strong>:jashkenas/coffeescript":
+coffee-script@jashkenas/coffeescript:
   version "1.11.1"
-  resolved "https://codeload.github.com/jashkenas/coffeescript/tar.gz/887052de079b2f0af9f080031a00bb7544eaca08"
+  resolved "https://codeload.github.com/jashkenas/coffeescript/tar.gz/0d132318ce8f7116a436d97db1f2a5c8b1dedf28"

 [email protected]:
   version "0.3.0"

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์ˆ˜์ •๋˜๋Š” ์ž ๊ธˆ ํŒŒ์ผ๋กœ ์ด์–ด์ง€๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด ๋ณ€๊ฒฝ์€ ์‹ฌ๊ฐํ•œ ๊ฒƒ์ด๋ฉฐ ์ž ๊ธˆ ํŒŒ์ผ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์š”๊ตฌํ•จ์œผ๋กœ์จ ์ž ๊ธˆ ํŒŒ์ผ์„ 2๊ธ‰ ์‹œ๋ฏผ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‚˜๋Š” yarn install ๋ฅผ node_modules๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ช…๋ น์œผ๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.
package.json, yarn.lock ๋ฐ cleanup node_modules๋ฅผ ์ˆ˜์ •ํ•˜๋Š” yarn add ๋ฐ yarn remove ์™€ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค.
add ๋ฐ remove ๋‹ฌ๋ฆฌ ์ €๋Š” ํŠนํžˆ ๋ถ€์ž‘์šฉ์ด ์ „ํ˜€ ์˜ˆ์ƒ๋˜์ง€ ์•Š๋Š” CI์—์„œ install 100๋ฐฐ ๋” ์ž์ฃผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€ํ™”๊ฐ€ ์˜ˆ์ƒ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ:

  1. ์ €๋Š” Yarn 0.15.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ํŒ€์›๋“ค์€ Yarn 0.16.0์„ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.
    0.16.0์€ ๋‚ด ํŒ€ ๋™๋ฃŒ๊ฐ€ ์ƒ์„ฑํ•œ yarn.lock์— ๋Œ€ํ•ด yarn install ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค yarn.lock์˜ ํ•ญ๋ชฉ ์‚ฌ์ด์— ๊ณต๋ฐฑ์„ ์ถ”๊ฐ€ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๋„๋ก ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ์ˆ˜์ •๋œ yarn.lock ํŒŒ์ผ์„ ์–ป์Šต๋‹ˆ๋‹ค.
    ๊ทธ ๋ฐ˜๋Œ€.
  2. ๋‚ด ๋‹ค๋ฅธ ๋นŒ๋“œ ๋„๊ตฌ๋Š” node_modules ์ƒํƒœ์˜ "์ง„์‹ค์˜ ์†Œ์Šค"๋กœ yarn.lock์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‚ด ๋นŒ๋“œ์—์„œ ๋น„๊ฒฐ์ •์„ฑ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

@๊ณ ์–‘์ด

๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์ด ์ˆœ์ˆ˜ํ•˜๋ฉด ๋ณ„๋„์˜ ๋ช…๋ น์ด ๋˜๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ npm์„ ์‚ฌ์šฉํ•˜๊ณ  package.json์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. yarn.lock์€ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๊นŒ?

yarn install ๊ฐ€ yarn.lock ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด yarn.lock ๊ฐ€ package.json ์™€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ์‹คํŒจํ•˜์—ฌ yarn install --save-lockfile ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ๋™๊ธฐํ™”ํ•˜๋ ค๋ฉด

+1 ์›์‚ฌ ์„ค์น˜๋Š” yarn.lock์„ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

  1. ๋””๋ฒ„๊ฑฐ๋Š” oss ์•ฑ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ์—ฌ์ž๊ฐ€ _good_ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๊ณ  ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด npm์„ ์„ค์น˜ํ•˜๊ณ  ์ „์ด ์†์„ฑ ๋•Œ๋ฌธ์— ์ค‘๋‹จ๋˜์—ˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์—ฌ์ž๊ฐ€ ์‹ค์„ ์„ค์น˜ํ•˜๊ณ  ์‹ค ์ž ๊ธˆ ๋ณ€๊ฒฝ์œผ๋กœ ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

์ž ๊ธˆ ํŒŒ์ผ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ ๊ทธ๋ฆฐํ‚คํผ๋Š” deps๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ž ๊ธˆ ํŒŒ์ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ˜„์žฌ ์ƒ๊ฐ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. @kittens ์™€ ์ €๋Š” ๋‘˜ ๋‹ค --pure-lockfile ๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๋กœ ๊ธฐ๋ณธ๊ฐ’์ด _not_ ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์ข…์†์„ฑ์„ ์ถ”๊ฐ€/์ œ๊ฑฐ/์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ช…๋ น์ด ์žˆ์ง€๋งŒ ์†์œผ๋กœ โ€‹โ€‹๋˜๋Š” Lerna ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ package.json ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

Yarn๊ณผ npm ๋ชจ๋‘์—์„œ package.json ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ์„ค์น˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ package.json _syncs_ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ yarn install ๋Š” ๊ฑฐ์˜ yarn sync ๋กœ ์ด๋ฆ„์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™๊ธฐํ™” ์ฃผ์ œ์— ๋Œ€ํ•ด ์ƒˆ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ node_modules ๋””๋ ‰ํ† ๋ฆฌ์— ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. yarn.lock ๋Š” node_modules ์˜ ์กฐ์ˆ˜ ์—ญํ• ์„ ํ•˜๋ฏ€๋กœ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ package.json ๋Š” ์ง„์ •ํ•œ ์ •๋ณด์˜ ๊ถ๊ทน์ ์ธ ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ์ฆ‰, yarn์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ, ๊ตฌ์„ฑ์ด๋ฉฐ ํ•ญ์ƒ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์ธ ์„ธ๊ณ„์—์„œ๋Š” ๋‹จ์ˆœํžˆ yarn.lock ๋ฅผ ์ปค๋ฐ‹ํ•˜๊ณ  ๋‹ค์‹œ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.


์ฐธ๊ณ ๋กœ ์ €๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ง€์ง€๋ฅผ ํ‘œ๋ช…ํ•˜๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๊ธฐ์„œ ์‹ค์ œ๋กœ ๋…ผ์˜๋˜๊ณ  ์žˆ๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ --pure-lockfile ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ Yarn์ด ์ผ๊ด€๋˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋™์ผํ•œ package.json ๋Š” ๋™์ผํ•œ yarn.lock ๋˜์–ด 100% ๋™์ผํ•œ node_modules ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

package.json ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด yarn.lock ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  node_modules ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‚ฌ๋ฌผ์— ๋Œ€ํ•œ ๋งค์šฐ ์ž์—ฐ์Šค๋Ÿฌ์šด ์งˆ์„œ์ด๋ฉฐ ์šฐ๋ฆฌ๋Š” ๊ทธ๋ ‡๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค


package.json ์—…๋ฐ์ดํŠธํ–ˆ์ง€๋งŒ yarn install ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ CI๊ฐ€ ๋‹ค๋ฅธ ์ข…์†์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋ฌธ์ œ)-- ๋‚˜์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ Yarn ํ†ตํ•ฉ์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ CI ๋„๊ตฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ์™”์œผ๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด ํฐ ๋ฌธ์ œ๋กœ ๋ณผ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ --pure-lockfile ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์‰ฝ๊ฒŒ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ข…์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ํ›จ์”ฌ ๋” ์ž์ฃผ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‚˜์—ดํ•œ ์ด์œ ๋กœ ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์•„์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

@jameskyle ๋ญ”๊ฐ€๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐœ๋ฐœ์ž๋Š”์ด package.json ์ข…์†์„ฑ์ด ํฌํ•จ ๋œ "foo": "^1.0.0"
  2. ๊ฐœ๋ฐœ์ž๋Š” yarn install ํ•ฉ๋‹ˆ๋‹ค. foo ํŒจํ‚ค์ง€๋Š” ํ˜„์žฌ ๋ฒ„์ „ 1.0.0 ์ด๋ฏ€๋กœ [email protected] ์ž ๊ธฐ๋Š” yarn.lock ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  3. ๊ฐœ๋ฐœ์ž๋Š” Git์— yarn.lock ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฐœ๋ฐœ์ž๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  5. ๊ฐœ๋ฐœ์ž๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ CI(์˜ˆ: Travis)์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.
  6. CI๋Š” yarn install ๋ฅผ ์‹คํ–‰ํ•˜์ง€๋งŒ foo ๋Š” ์ด์ œ 1.1.0 ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์œผ๋ฏ€๋กœ Yarn์€ [email protected] ํ•˜๊ณ  yarn.lock ๋ฅผ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค. foo
  7. foo ๋ฒ„์ „ 1.1.0 ์—์„œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฏ€๋กœ CI๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ฐœ๋ฐœ์ž๋Š” "foo": "^1.0.0" ์ข…์†์„ฑ์„ ํฌํ•จํ•˜๋Š” package.json ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ [email protected] ๋กœ ์ž ๊ฒจ ์žˆ๊ณ  yarn.lock ๋Š” Git์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ฐœ๋ฐœ์ž ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ธฐ์—ฌ์ž๋Š” ์ˆ˜์ • + ํ’€ ์š”์ฒญ์„ ํ•  ์˜๋„๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ธฐ๊ณ ์ž๊ฐ€ yarn install ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด yarn.lock ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š” [email protected] ๋ฒ„์ „์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  5. foo ๋ฒ„์ „ 1.1.0 ์—์„œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ ๊ธฐ๊ณ ์ž์˜ ๋นŒ๋“œ๊ฐ€ ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ฑฑ์ •ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐ”๋กœ ๊ทธ๋Ÿฐ ์ƒํ™ฉ์ธ ๊ฒƒ ๊ฐ™์•„์š”.

๋”ฐ๋ผ์„œ yarn install ์˜ ํ˜„์žฌ ๋™์ž‘์— ์œ„์˜ ๋ฌธ์ œ๊ฐ€ ์—†์Œ ์„ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๋‘๋ ค์›€์ด ์ œ๊ฑฐ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :+1:

์ด๋Ÿฌํ•œ ์ƒํ™ฉ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ package.json ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น ์ข…์†์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์œ ์ผํ•œ ๊ด€์‹ฌ์‚ฌ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋” ๋งŽ์€ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์œ„์—์„œ ๋ณด๊ณ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ github์—์„œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ๋™์ž‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@adamchainz ๋”ฐ๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ปค๋ฐ‹์— ์‰ฝ๊ฒŒ ์ž ๊ธ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ package.json ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น ์ข…์†์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

@jameskyle : ์ด๊ฒƒ์ด ์‹ค์ œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์•„๋‹Œ ์ด์œ ๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ž…๋ ฅ์ด package.json ์ด๊ณ  ์ถœ๋ ฅ์ด yarn.lock ๋ฉ”๋ชจ ์ž‘์„ฑ ๊ธฐ๋Šฅ์„ ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค.

  1. ์ฒ˜์Œ์—๋Š” ํŒจ์Šค package.json ๊ทธ๊ฒƒ์ด ์ƒ์„ฑ yarn.lock ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.
  2. ๋‹ค์Œ์— _that same_ package.json ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๊ฒฐ๊ณผ๋Š” ์บ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  3. package.json ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋˜์—ˆ์œผ๋ฉฐ ์ด์ œ yarn.lock ๊ฐ€ ๋‹ค์‹œ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์€ # 3์„ ์—†์• ๊ณ  ๋Œ€์‹  yarn.lock ๋ฅผ ๋ณ€๊ฒฝ๋œ package.json ์˜ํ•ด ๋ฌดํšจํ™”๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ์ด์ฆˆ ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ์ •๋ง ์ด์ƒํ•  ๊ฒƒ์ด๊ณ  Yarn์—๋„ ์ •๋ง ์ด์ƒํ•œ ํ–‰๋™์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ๋ฐ ์ƒˆ ๋ฒ„์ „ ์ธก๋ฉด์—์„œ ํŒจํ‚ค์ง€์— ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ _should_๋Š” ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค(git ์ปค๋ฐ‹์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณ„๋„๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค).

๋‚ด๊ฐ€ ๋งŒ๋“  ๊ฒƒ๋ณด๋‹ค ๋” ๋ณต์žกํ•˜์ง€๋งŒ(๊ฐ ํŒจํ‚ค์ง€ ๋ฒ„์ „์€ ๊ฐœ๋ณ„์ ์œผ๋กœ ํšจ๊ณผ์ ์œผ๋กœ "๊ธฐ์–ต"๋˜๊ณ , ํ•œ ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•ด๋„ ๋‚˜๋จธ์ง€๋Š” ๋ฌดํšจํ™”๋˜์ง€ ์•Š์Œ) ์ด์ œ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์š”์ ์„ ์•Œ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@thejameskyle : ๋ช…ํ™•ํ•จ(๊ทธ๋ฆฌ๊ณ  ํ˜ธ๊ธฐ์‹ฌ)์„ ์œ„ํ•ด yarn.lock ํŒŒ์ผ์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๊ณ  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ €์žฅ์†Œ๋ฅผ ํ’€๋‹ค์šดํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. yarn install ๋˜๋Š” npm install ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ด ์‚ฌ๋žŒ์€ package.json ํŒŒ์ผ์— ์ƒˆ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ yarn install ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ธฐ์กด yarn.lock ํŒŒ์ผ์ด ์™„์ „ํžˆ ๋ฌด์‹œ๋ฉ๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ํ’€๊ณ ์ž ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ผ๋“ค์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋ง์žฅ๋‚œ ์˜๋„ ์—†์Œ).

์ฒซ์งธ, ์‚ฌ๋žŒ๋“ค์€ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ œ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ด๋กœ ์ธํ•ด ๊ธฐ์กด ๋™์ž‘์˜ ์ผ๋ถ€๊ฐ€ ๋ฒ„๊ทธ๊ฐ€ ๋˜๋ฉฐ, ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๊ณง ๋‹ค๋ฃจ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค).

์›๋ž˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์—์„œ.

ํ™˜๊ฒฝ(ํ˜„์žฌ ์„ค์น˜๋œ ์›์‚ฌ์˜ ๋ฒ„์ „)์— ๋”ฐ๋ผ lockfile์„ ์ˆ˜์ •ํ•˜๋ฉด ์ผ๊ด€์„ฑ์ด ์ƒ์‹ค๋ฉ๋‹ˆ๋‹ค.
์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์›์‚ฌ ์„ค์น˜ ์‹œ yarn.lock ๋˜๋Š” package.json์„ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
yarn.lock์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด yarn upgrade๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๋” ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์˜ˆ์ƒ๋˜๋Š” ์˜๋ฏธ๋ก ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • package.json ์ด yarn.lock ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์ดํ›„๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ yarn.lock ๋Š” ์ง„์‹ค์˜ ์†Œ์Šค์ด๋ฏ€๋กœ ์—…๋ฐ์ดํŠธํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ์šฐ package.json ์ง€๋‚œ ์ดํ›„์— ๋ณ€๊ฒฝ๋œ yarn.lock ๋ณ€๊ฒฝ ์—…๋ฐ์ดํŠธ yarn.lock ๋งŒ์กฑ ๋„ˆ๋ฌด package.json ๋ฐ ๊ฐฑ์‹  node_modules .
  • yarn update ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋‹ค์‹œ ํ•ด๊ฒฐํ•˜๊ณ  package.json ๋ฅผ ์ถฉ์กฑํ•˜๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ €์žฅ์†Œ๊ฐ€ ๋จธ์‹  ์—์„œ yarn.lock ๊ฐ€ ์ฒดํฌ์ธ๋œ ๊ฒฝ์šฐ, yarn์€ ํ•ญ์ƒ ์ด๋ฅผ ์†Œ์Šค๋กœ ์ทจ๊ธ‰ํ•ด์•ผ ํ•˜๋ฉฐ yarn.lock ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ ํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ ๋‹จ๊ณ„๋กœ ์ง์ ‘ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํ˜„์žฌ yarn์˜ ๋™์ž‘์ด ์•„๋‹Œ ํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


@esphen ์€ ๋‹ค์Œ

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค. ์ „์ฒด ์ž ๊ธˆ ํŒŒ์ผ ๊ฐœ๋…๊ณผ ์ƒ๋ฐ˜๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— yarn install์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ„์ „์„ ์ž ๊ทธ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ์ด ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ ๊ธฐ์กด์˜ ์ž ๊ธˆ ํŒŒ์ผ์ด ์—ฌ์ „ํžˆ ์ตœ์‹  ์ƒํƒœ๋ผ๋ฉด ์›์‚ฌ๊ฐ€ ์ƒˆ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ณ€๊ฒฝ ์ž‘์—…๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋Š” @bestander ์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์ถ”๊ฐ€/์—…๊ทธ๋ ˆ์ด๋“œ/์ œ๊ฑฐ).

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋Š” package.json ๋Œ€ํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด yarn.lock ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” package.json ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด yarn.lock ์˜ํ•ด ๋งŒ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด yarn.lock ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

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

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


@Guuz ๋Š” ๋‹ค์Œ๊ณผ

๊ทธ๋ž˜์„œ, ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด :
yarn์€ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๊ณ  ์ž ๊ธˆ ํŒŒ์ผ๋„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. CI ์„œ๋ฒ„์—์„œ๋Š” yarn install --pure-lockfile?์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์งˆ๋ฌธ์€ ์ด ์Šค๋ ˆ๋“œ์—์„œ ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์ด ํ•œ ๊ฐ์ •์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

Cargo์—๋Š” " package.json ๊ฐ€ yarn.lock ์˜ํ•ด ๋งŒ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ํ•˜๋“œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค"๋ผ๋Š” --locked ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Bundler์—๋Š” ์œ ์‚ฌํ•œ ํ”Œ๋ž˜๊ทธ( --frozen )๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Heroku๊ฐ€ Bundler๋ฅผ ์ฑ„ํƒํ•  ๋•Œ ์ถ”๊ฐ€๋˜์–ด Gemfile ๋ฅผ ๋กœ์ปฌ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  Gemfile.lock ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์„ ๋•Œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋Š” ์ •์ƒ์ ์ธ ๊ฐœ๋ฐœ ์ค‘์— package.json ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ณ  ์›์‚ฌ์—์„œ yarn.lock ๊ฐ€ ๋™๊ธฐํ™” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•˜๋ ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‹ค์‹œ, ์ง€์ •๋œ ๋ฒ„์ „์ด package.json ํ•ญ์ƒ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐํฌํ•  ๋•Œ package.json ๋ณ€๊ฒฝํ•˜๊ณ  ๋กœ์ปฌ yarn ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์œผ๋ฉฐ yarn.lock ์ฒดํฌ์ธ์„ ์žŠ์–ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๊ธฐ๋œ ๊ฒƒ์€ ๊ฑฐ์˜ ํ•ญ์ƒ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค yarn . ์ด๊ฒƒ์€ package.json ๋ฒ„์ „์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ ์‚ฌ์šฉ๋œ ์‹ค์ œ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งํ–ˆ๋˜ ์›์‚ฌ์˜ ๊ธฐ๋ณธ ๋ถˆ๋ณ€์„ฑ์„ ์œ„๋ฐ˜ํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.


@esphen ์€ ๋‹ค์Œ๊ณผ

์ œ ์ƒ๊ฐ์—๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ•  ์ค‘ ํ•˜๋‚˜๋Š” ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์›์‚ฌ ์„ค์น˜๋กœ ํ˜ผ๋ž€ ์—†์ด ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

npm์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ๊ฐœ๋ฐœ์ž ์ธ์Šคํ„ด์Šค๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ–ˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์Šคํ„ด์Šค๋Š” ์ผ์‹œ์ ์ธ ์ข…์†์„ฑ์œผ๋กœ ์ธํ•ด ๋ฒ„์ „์ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๋ฒ„์ „์œผ๋กœ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ semver๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” yarn์ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ yarn install --pure-lockfile ์„ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋นŒ๋“œ๋  ๊ฒƒ์ด๋ผ๊ณ  100% ํ™•์‹ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค.

yarn install --pure-lockfile ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ ๋‚ด๋ถ€์˜ ๋ฒ„์ „์ด package.json ์ง€์ •๋œ ๋ฒ„์ „๊ณผ ์ถฉ๋Œํ•˜๋”๋ผ๋„ ์ž ๊ธˆ ํŒŒ์ผ์ด ์กด์ค‘๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์žŠ์–ด๋“ค์ด ์ฒดํฌ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฒซ ๋ฒˆ์งธ ์žฅ์†Œ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค yarn.lock ๋ฐ›๋Š” ์‚ฌ๋žŒ ๋ณ€๊ฒฝ ํ•œ ํ›„ package.json .

ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์˜ ๋˜ ๋‹ค๋ฅธ ์—ญํ• ์€ ํ”„๋กœ์ ํŠธ์— ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์˜ค๋ž˜๋œ ๋ฒ„์ „์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์›์‚ฌ๋ฅผ ์‚ดํŽด๋ณธ ๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜์—ฌ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์šฐ๋ฐœ์ ์ธ ์ž ๊ธˆ ํŒŒ์ผ ์ปค๋ฐ‹์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ git commit -a๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•˜๋Š” ๋Œ€์‹  ์ง€์ •๋œ ๋ฆด๋ฆฌ์Šค ๊ธฐ๊ฐ„์— ๋ฒ„์ „์„ ๋ฒ”ํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ถŒํ•œ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

package.json ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ œ ์ƒ๊ฐ์—๋Š” yarn.lock ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ๋ฒ„๊ทธ์˜ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ๊ฐ€ ์›๋ž˜ ๋ณด๊ณ ์„œ์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

lockfile์€ ํ™˜๊ฒฝ(ํ˜„์žฌ ์„ค์น˜๋œ yarn์˜ ๋ฒ„์ „)์— ๋”ฐ๋ผ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜ค๋ฅ˜์ด๋ฉฐ ์ˆ˜์ •๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ์Šค๋ ˆ๋“œ์—์„œ @thejameskyle ์€ ๋‹ค์Œ๊ณผ

์ž…๋ ฅ์ด package.json์ด๊ณ  ์ถœ๋ ฅ์ด yarn.lock์ธ ๋ฉ”๋ชจ์ด์ฆˆ ํ•จ์ˆ˜๋ฅผ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”.

๊ทธ๊ฑด ๋‚ด๋ณด๊ธฐ์—, ์ •ํ™•ํžˆ ์˜ฌ๋ฐ”๋ฅธ ์ •์‹  ๋ชจ๋ธ์ด๋‹ค ( " yarn.lock ์™€ ๊ฒฝ์šฐ์—๋งŒ ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค package.json ๋ณ€๊ฒฝ"), ๊ทธ๋ฆฌ๊ณ  ์ถ”์ƒํ™” ๋ˆ„์ˆ˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.


@adamchainz ๋Š” ๋‹ค์Œ๊ณผ

์œ„์˜ ์ถ”๊ฐ€ ์ •๋ณด: ์šฐ๋ฆฌ ๋นŒ๋“œ์—๋Š” ํ•˜์œ„ ์ข…์†์„ฑ์œผ๋กœ Github์˜ coffeescript๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. coffeescript๋Š” ์ผ๋ถ€ ์ปค๋ฐ‹์„ ํ‘ธ์‹œํ–ˆ๊ณ  ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ yarn install์„ ์‹คํ–‰ํ•˜์—ฌ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์—์„œ ์ˆ˜์ •๋œ yarn.lock์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์—:

๊ทธ๋Ÿฌ๋‚˜ ์œ„์—์„œ ๋ณด๊ณ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ github์—์„œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ๋™์ž‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” yarn์ด git sha๋ฅผ ์ž ๊ธด ๋ฒ„์ „์˜ git ์ข…์†์„ฑ์˜ ์ผ๋ถ€๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Cargo์™€ Bundler๋Š” ๋ชจ๋‘ ์ž ๊ธˆ ํŒŒ์ผ๋กœ ์ง๋ ฌํ™”๋˜๋Š” "์ •ํ™•ํ•œ" ๋ฒ„์ „์˜ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. git ์†Œ์Šค์˜ ๊ฒฝ์šฐ "์ •ํ™•ํ•œ" ๋ฒ„์ „์€ SHA์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ƒˆ๋กœ์šด ํด๋ก ์„ ํ•  ๋•Œ ๊ทธ๋Ÿฐ ๋‹ค์Œ, ๋‹จ์ง€ package.json ๋ฐ yarn.lock ์‹คํ–‰ yarn , ๋‹น์‹ ์ด ํ•„์š”๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์–ป์„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธ git ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•  ๋•Œ ์ด ์ƒํ˜ธ ์ž‘์šฉ์„ ๋†“์ณค๋‹ค๋Š” ๊ฒƒ์„ ๊ณ ๋ฐฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์— ์ผ๋ถ€ SHA ์ถ”์ ์ด ์žˆ์ง€๋งŒ yarn install ๋Š” ์ˆ˜ํ™” ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ด๋ฅผ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


TL;DR

๋‚˜๋Š” yarn.lock ๊ฐ€ package.json ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” @thejameskyle ๋ฐ @kittens์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ €๋Š” ์‚ฌ์šฉ์ž๊ฐ€ package.json ์ง€์ •๋œ ๋ฒ„์ „์„ ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ •๋ ฌํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฌ๋‚˜ package.json ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ yarn.lock ์—์„œ ๋ถ€์ ์ ˆํ•œ ์ดํƒˆ์„ ์ผ์œผํ‚ค๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์—์„œ ์›์‚ฌ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
  • package.json ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ git ์ข…์†์„ฑ์ด ์—…๋ฐ์ดํŠธ๋˜์–ด ์ž ๊ธˆ ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Cargo์˜ --locked ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ package.json ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋œ yarn.lock ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ CI์—์„œ ๋นŒ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹คํŒจํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

@jameskyle ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! :heart: package.json ๋ณ€๊ฒฝ ํ›„ yarn.lock ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ท€ํ•˜์™€ @kittens์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

@wycats ํ‰์†Œ์™€ ๊ฐ™์ด ๋งค์šฐ ์ฒ ์ €ํ•˜๊ณ  ํ†ต์ฐฐ๋ ฅ ์žˆ๋Š” ๊ฒŒ์‹œ๋ฌผ์ž…๋‹ˆ๋‹ค. :+1: ๋‚˜๋Š” ๋‹น์‹ ์˜ ์˜๊ฒฌ์— ๋™์˜ํ•˜๊ณ  --locked ํ”Œ๋ž˜๊ทธ(๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ)์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

git SHA ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด #1568์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

@wycats , ๋งค์šฐ ํ†ต์ฐฐ๋ ฅ ์žˆ๋Š” ๊ฐœ์š”๋ฅผ ํ’€์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด๋Š” ์ €์žฅ์†Œ๊ฐ€ ๋จธ์‹ ์—์„œ ์ฒ˜์Œ ๋ณต์ œ๋  ๋•Œ yarn.lock์ด ์ฒดํฌ์ธ๋œ ๊ฒฝ์šฐ, yarn์€ ํ•ญ์ƒ ์ด๋ฅผ ์›๋ณธ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ , yarn.lock์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ๊ฐ€์ ธ์˜ค๊ธฐ ๋‹จ๊ณ„๋กœ ์ง์ ‘ ์ด๋™ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ํ˜„์žฌ yarn์˜ ๋™์ž‘์ด ์•„๋‹Œ ํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด ๋ฌธ์ œ๊ฐ€ ๊ณต๊ฐœ๋œ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค.
ํšŒ์‚ฌ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ํ™œ์„ฑ ๋ฒ„์ „์˜ Yarn์ด ์žˆ์œผ๋ฉฐ ์šฐ๋ฆฌ ๊ทœ๋ชจ๋กœ๋Š” ๋ชจ๋“  ๊ณณ์—์„œ ์›์ž์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
yarn 0.13, 0.14 ๋ฐ 0.15๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œํ•˜๋ฉด package.json์ด ๋™๊ธฐํ™”๋œ ๊ฒฝ์šฐ์—๋„ yarn.lock ํŒŒ์ผ์— ์•ฝ๊ฐ„์˜ ๋ณ€ํ˜•์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด๋กœ ์ธํ•ด ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์†Œ์Šค ํŠธ๋ฆฌ์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋˜์–ด Buck ๋นŒ๋“œ ์†๋„๊ฐ€ ๋Š๋ ค์กŒ์Šต๋‹ˆ๋‹ค.
์ด๋กœ ์ธํ•ด ๋‚˜์™€ ๋‘ ํŒ€์ด ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค.

@jameskyle , ์˜๊ฒฌ์„ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ €๋Š” package.json์ด yarn.lock๊ณผ ๋™๊ธฐํ™”๋˜์ง€ ์•Š๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณต์ •ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ์œ ํšจํ•œ ํฌ์ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ @wycats๊ฐ€ ์ง€์ ํ–ˆ๋“ฏ์ด ์›๋ž˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋Š” ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ์œ ํšจํ•œ ๋นŒ๋“œ๋ฅผ ๊ฐ–๋Š” ๋ฐ ์ค‘์š”ํ•˜๋ฉฐ ๋ชจ๋“  ์ดํ•ด ๊ด€๊ณ„์ž๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ์†”๋ฃจ์…˜์„ ์ œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค.

@wycats

๋” ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์˜ˆ์ƒ๋˜๋Š” ์˜๋ฏธ๋ก ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • package.json ์ด yarn.lock ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์ดํ›„๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ yarn.lock ๋Š” ์ง„์‹ค์˜ ์†Œ์Šค์ด๋ฏ€๋กœ ์—…๋ฐ์ดํŠธํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ์šฐ package.json ์ง€๋‚œ ์ดํ›„์— ๋ณ€๊ฒฝ๋œ yarn.lock ๋ณ€๊ฒฝ ์—…๋ฐ์ดํŠธ yarn.lock ๋งŒ์กฑ ๋„ˆ๋ฌด package.json ๋ฐ ๊ฐฑ์‹  node_modules .
  • yarn update ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋‹ค์‹œ ํ•ด๊ฒฐํ•˜๊ณ  package.json ๋ฅผ ์ถฉ์กฑํ•˜๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ €์žฅ์†Œ๊ฐ€ ๋จธ์‹  ์—์„œ yarn.lock ๊ฐ€ ์ฒดํฌ์ธ๋œ ๊ฒฝ์šฐ, yarn์€ ํ•ญ์ƒ ์ด๋ฅผ ์†Œ์Šค๋กœ ์ทจ๊ธ‰ํ•ด์•ผ ํ•˜๋ฉฐ yarn.lock ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ ํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ ๋‹จ๊ณ„๋กœ ์ง์ ‘ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ๋“ค์€ ๋‚ด๊ฐ€ #364์—์„œ ์ถ”๊ฐ€ํ•œ ์˜๋ฏธ๋ก ์ž…๋‹ˆ๋‹ค.

@bestander ์ด๋Ÿฌํ•œ ํœด๋ฆฌ์Šคํ‹ฑ์„ ํ•˜์…จ์Šต๋‹ˆ๋‹ค . ์–ด๋–ค ์ถ”๊ฐ€ ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋Š” ๋งค์šฐ ๊ด‘๋ฒ”์œ„ํ•˜๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ --pure-lockfile ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋Š” ๋ฐ ๋™์˜ํ–ˆ์œผ๋ฉฐ @wycats๊ฐ€ ์„ค๋ช…ํ•œ ๊ฒฝํ—˜์  ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ์—ด๋ ค ์žˆ์œผ๋ฉด ์ œ๋ชฉ์— ์ด ๋™์ž‘๊ณผ ๊ด€๋ จ๋œ ํ˜„์žฌ ๋ฌธ์ œ๊ฐ€ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@kittens ๊ฐ€ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๋˜๋Š” package.json์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์„ค์น˜์™€ ๊ด€๋ จ๋œ ์ƒˆ ํ•ญ๋ชฉ์„ ์—ด์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ๋ฌธ์ œ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์— ์žˆ๋Š” ์ด ๋Œ“๊ธ€์€ ์•„์นด์ด๋ธŒ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@thejameskyle , ์˜ค๋Š˜ ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ๋งํฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์ดˆ์ ์„ ๋งž์ถ˜ ๋ฌธ์ œ ์ƒ์„ฑ https://github.com/yarnpkg/yarn/issues/1576

package.json์˜ ํŒจํ‚ค์ง€๊ฐ€ yarn.lock์— ์—†์œผ๋ฉด yarn install ์‹คํŒจํ•˜๋„๋ก ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์œผ๋ฉด ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๊ฐ€ ์ž ๊ฒจ ์žˆ์ง€ ์•Š์œผ๋ฉด ์‹คํŒจ

์œ„์˜ ๋‚ด์šฉ์„ ์ฝ์€ ํ›„์—๋„ ์—ฌ์ „ํžˆ ๋ชจํ˜ธํ•œ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

tldr; package.json ๊ด€๋ จ ์—†๋Š” ๋ณ€๊ฒฝ์€ ํŒจํ‚ค์ง€๋ฅผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ package.json semver์™€ ํ˜ธํ™˜๋˜๋Š” ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋ฌธ๊ตฌ ์ค‘ ์ผ๋ถ€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ yarn.lock ๊ฐ€ package.json ํ•ด์‹œ์— ์บ์‹ฑ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ ธ ์œผ๋ฏ€๋กœ yarn.lock ๊ฐ€ (์—…๋ฐ์ดํŠธ๋จ/์บ์‹œ ๋ฌดํšจํ™”๋จ) )์— ๋ณ€๊ฒฝ์— package.json ๊ด€๋ จ์ด์—†๋Š” ๋ณ€๊ฒฝ ์ดํ›„์— ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค (์ฆ‰,์— ๊ฐฑ์‹  "description" ๋˜๋Š” ๋‹ค๋ฅธ ์ข…์†)์ด ์ข…์†์˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค yarn.lock ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ๋™์ผํ•œ ๊ธฐ์กด package.json semver ๋‚ด์˜ ์ตœ์‹  ๋ฒ„์ „.

๊ทธ๋Ÿฌ๋‚˜ ํŒจํ‚ค์ง€์˜ yarn.lock ํ•ญ๋ชฉ์€ ํ•ด๋‹น package.json semver๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งŒ ๊ธฐ๋ก๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค(์ƒˆ semver๊ฐ€ ๊ธฐ์กด yarn.lock ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋”๋ผ๋„ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ).

์˜ˆ๋ฅผ ๋“ค์–ด,

  • yarn add lodash@^4.17.1 ์„ค์น˜ [email protected]
  • ๋‚˜์ค‘์— [email protected] ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›์‚ฌ๋Š” ๊ณ„์† [email protected] ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • lodash์˜ ๋ฒ„์ „์ด package.json ๋กœ ๋ณ€๊ฒฝ ๋  ๋•Œ๊นŒ์ง€ (๋˜๋Š” yarn add/upgrade/remove๊ฐ€ lodash์— ๋Œ€ํ•ด ํŠน๋ณ„ํžˆ ์‹คํ–‰๋จ).

๋นต ๋ถ€์Šค๋Ÿฌ๊ธฐ #1576

BTW์™€ ๊ฐ™์€ ์ž‘์€ ๊ธฐ์‚ฌ๋กœ ๋ฌธ์„œ์— ๊ธฐ๊บผ์ด ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ•ต์‹ฌ ํŒ€์€ ๋ชจ๋‘ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š๋ผ ๋ฐ”์˜๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค๋ฉด ๊ฐ์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@CrabDude ์„ค๋ช…์„ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์—์„œ lodash ๋ฐ ์ž์ฒด ์ข…์†์„ฑ๋งŒ yarn.lock ์—์„œ ์ž ๊ธˆ ๋ฒ„์ „์ด ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค๋ฅธ ์ข…์†์„ฑ ์ด ์ƒˆ ์ž ๊ธˆ ๋ฒ„์ „์„ ๊ฐ€์งˆ

๋˜๋Š” ๋‘ ๋ฒˆ์งธ ์˜ˆ: yarn.lock ๊ฐ€ ์‹ฌํ•˜๊ฒŒ ๊ตฌ์‹์ด๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ yarn add ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ package.json์— ์ƒˆ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์˜ค๋ž˜๋œ ํŒจํ‚ค์ง€๋Š” ์ด์ œ yarn.lock ์—์„œ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๊นŒ?

@๋ผํ‚จ์Šค

์œ„์˜ ์˜ˆ์—์„œ lodash์™€ ์ž์ฒด ์ข…์†์„ฑ๋งŒ yarn.lock์—์„œ ์ž ๊ธˆ ๋ฒ„์ „์ด ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ. ์ด๊ฒƒ์€ ๋‚ด ์˜ˆ์—์„œ ์ง€์ง€๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ์˜ค๋ž˜๋œ ํŒจํ‚ค์ง€๊ฐ€ ์ด์ œ yarn.lock์—์„œ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๊นŒ?

lodash ๊ฐ€ ์•„๋‹Œ ์ข…์†์„ฑ ํŠธ๋ฆฌ/ํŒจํ‚ค์ง€์˜ ์ž ๊ธˆ ํ•ญ๋ชฉ์ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. lodash ์˜ ํ•˜์œ„ ์ข…์†์„ฑ๋งŒ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ ๊ด€์ ์—์„œ ์ด๋“ค ๊ฐ๊ฐ์€ ๋ฐ”๋žŒ์งํ•˜๊ณ  ๊ธฐ๋Œ€๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋จธ๋ฆฌ๋ง : ๋‚˜๋Š” ์‹ค์„ ์ข‹์•„ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ๋์—†์ด ์ขŒ์ ˆ์‹œํ‚ต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํšŒ์‚ฌ์—์„œ yarn install ๋Š” package.json ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ(๊ฐ๊ฐ ๋™์ผํ•œ ๋ฒ„์ „์„ ์‹คํ–‰ํ•จ) ๊ฐ„์— ์ž ๊ธˆ ํŒŒ์ผ์„ ์ง€์†์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—…๋ฐ์ดํŠธํ•  ๋•Œ yarn add ์‚ฌ์šฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ CI๊ฐ€ ๋นŒ๋“œ ํ›„ git ์ƒํƒœ๊ฐ€ ๊นจ๋—ํ•œ์ง€ ํ™•์ธํ•˜์—ฌ ์ž ๊ธˆ ํŒŒ์ผ ์ฒดํฌ์ธ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์žŠ์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค.

์›์‚ฌ์— ๋Œ€ํ•œ ๋‚˜์˜ ๊ธฐ๋Œ€๋Š” _๊ธฐ๋ณธ์ ์œผ๋กœ_ ๋ชจ๋“  ์‹œ์Šคํ…œ์—์„œ ๋™์ผํ•œ node_modules๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํŽธ๋ฆฌํ•จ๋ณด๋‹ค ์ •ํ™•์„ฑ์„ ์šฐ์„ ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถˆํ™•์‹ค์„ฑ์„ ์›ํ•˜๋ฉด npm์„ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฌด์–ธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ์‹ ํ˜ธ์ด๋ฏ€๋กœ ์ž์„ธํžˆ ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ

  • lockfile์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ node_modules์˜ ๋‚ด์šฉ์€ ์ƒ์„ฑ๋  ๋•Œ์™€ ํ•ญ์ƒ ๋™์ผํ•˜๋‹ค๋Š” ๋ง์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๊ณ  ๋ฏฟ์ง€ ์•Š์ง€๋งŒ ๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ์Šค๋ ˆ๋“œ์˜ ํ˜ผ๋ž€์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‹ค์ด ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ด ์˜ณ์€ ์ผ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • package.json ๋ณ€๊ฒฝ๋˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด ์žฌ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ node_modules ์ƒํƒœ์— ๋”ฐ๋ผ ์˜๋„์น˜ ์•Š๊ฒŒ ๋งŽ์€ ์ข…์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ? Yarn์€ ๋ธํƒ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ๊ธฐ์กด ์ž ๊ธˆ์„ โ€‹โ€‹๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ๋Œ€ํ•œ ๋ณด์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์•„์ง ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ).
  • ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ yarn add ์˜ ๋ฒ„์ „ ์ง€์ • package.json A๋ฅผ ^ ? ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ €๋Š” yarn์˜ ์•ฝ์†์ด ์˜์กด์„ฑ์„ ๋™๊ฒฐํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ฒ„๊ทธ

  • node_modules ์—์„œ ์ž„์˜์˜ ํŒจํ‚ค์ง€๋ฅผ ์‚ญ์ œํ•˜๋ฉด yarn install ๋‹ค์‹œ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์„ฑ๊ณต์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์ด ๋งŽ์ด ์‚ฌ๋ผ์ง€๋ฉด ๋‹ค์‹œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. npm ๋Š” ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์ข€ ๋” ์ฒ ์ €ํ•ฉ๋‹ˆ๋‹ค.
  • node_modules๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ์„ค์น˜ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ง ๊ทธ๋Œ€๋กœ ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์— ์žˆ๋Š” ๊ฒƒ์„ ์ •ํ™•ํžˆ ์„ค์น˜ํ•˜๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค)
  • ์ƒˆ๋กœ ์„ค์น˜ํ•œ ํ›„ ํŒจํ‚ค์ง€ ๋˜๋Š” node_modules ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ž ๊ธˆ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋ฉด yarn์ด ์ด๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์ „ ๋ฒ„์ „๊ณผ ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ „๋ฐ˜์ ์œผ๋กœ, yarn์€ ์„ค์น˜๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜์ง€๋งŒ ํ•ต์‹ฌ (in)๋Šฅ๋ ฅ์—์„œ ์‹คํŒจํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ„์ „์„ ์ผ๊ด€๋˜๊ฒŒ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ํŽธ์˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ˆ˜๋…„์— ๊ฑธ์ณ ๊ฑฐ๋Œ€ํ•œ ํŒ€์„ ํ†ตํ•ด ๊ทธ๊ฒƒ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋˜‘๋˜‘ํ•˜๊ณ  ์˜๋„์ ์ด์–ด์„œ ๋ณ€๊ฒฝ์„ ์›ํ•  ๋•Œ ๋ช…์‹œ์ ์œผ๋กœ ์š”์ฒญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•˜๋Š” ์ž ๊ธˆ ํŒŒ์ผ์€ ์ž์‹ ๊ฐ์„ ์‹ฌ์–ด์ฃผ์ง€ ๋ชปํ•˜๊ณ  ๋Š์ž„์—†๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ์ค๋‹ˆ๋‹ค. ๋‚˜๋Š” package.json์ด lockfile๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ, lockfile์ด node_modules์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ, ์ž ๊ธด ๋ฒ„์ „์ด ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋“ฑ์˜ ๊ฒฝ๊ณ ์™€ ์˜ค๋ฅ˜๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์˜์กด์„ฑ์— ๋Œ€ํ•ด ์˜๋„์ ์ธ ๊ฒฐ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.

@jspiro ,
์—ฌ๊ธฐ์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์ œ๊ธฐ๋ฉ๋‹ˆ๋‹ค.
๊ฐ ๋ฌธ์ œ๋ฅผ ๋ณ„๋„๋กœ ์—ฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฃผ์„์—์„œ ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

์ตœ์‹  ๋ฒ„์ „์˜ Yarn์„ ์‚ฌ์šฉ ์ค‘์ด์‹ ๊ฐ€์š”?
0.18-0.19์—์„œ ์šฐ๋ฆฌ๋Š” ๋จธ์‹  ์‚ฌ์ด์—์„œ yarn.lock ํŒŒ์ผ์— ๋Œ€ํ•œ ์ˆ˜์ •์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ:

lockfile์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ node_modules์˜ ๋‚ด์šฉ์€ ์ƒ์„ฑ๋  ๋•Œ์™€ ํ•ญ์ƒ ๋™์ผํ•˜๋‹ค๋Š” ๋ง์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๊ณ  ๋ฏฟ์ง€ ์•Š์ง€๋งŒ ๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ์Šค๋ ˆ๋“œ์˜ ํ˜ผ๋ž€์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‹ค์ด ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ด ์˜ณ์€ ์ผ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์ผํ•œ ์ž ๊ธˆ ํŒŒ์ผ์— ๋Œ€ํ•ด Dev ๋ฐ ์„ ํƒ์  ์ข…์†์„ฑ์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํ”Œ๋žซํผ๋ณ„ ํŒจํ‚ค์ง€๋ฅผ ์ œ์™ธํ•˜๊ณ  bing ์„ค์น˜๋˜๋Š” ๊ฒƒ์€ node_modules์˜ ๋™์ผํ•œ ์œ„์น˜์— ๋™์ผํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

package.json์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ node_modules ์ƒํƒœ์— ๋”ฐ๋ผ ์˜๋„์น˜ ์•Š๊ฒŒ ๋งŽ์€ ์ข…์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ? Yarn์€ ๋ธํƒ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ๊ธฐ์กด ์ž ๊ธˆ์„ โ€‹โ€‹๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ๋Œ€ํ•œ ๋ณด์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์•„์ง ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ).

์ข‹์€ ๊ธฐ๋Šฅ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ PR์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์›์‚ฌ ์ถ”๊ฐ€๊ฐ€ ^๋กœ package.json์˜ ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ €๋Š” yarn์˜ ์•ฝ์†์ด ์˜์กด์„ฑ์„ ๋™๊ฒฐํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” npm์˜ ํ–‰๋™์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
์ •ํ™•ํ•œ ๋ฒ„์ „์— ๋Œ€ํ•ด yarn add [email protected] ๋˜๋Š” yarn add is-array --exact ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์–ธ์  ๊ฐ€๋Š” ์ •ํ™•ํ•œ ๋ฒ„์ „์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ RFC์—์„œ ๋…ผ์˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

node_modules์—์„œ ์ž„์˜์˜ ํŒจํ‚ค์ง€๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ๋‹ค์‹œ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  yarn install์— ์„ฑ๊ณต์ด๋ผ๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์ด ๋งŽ์ด ์‚ฌ๋ผ์ง€๋ฉด ๋‹ค์‹œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. npm์€ ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์ข€ ๋” ์ฒ ์ €ํ•ฉ๋‹ˆ๋‹ค.

Yarn์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น ๋ฅธ ์–•์€ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์‹ฌ์ธต ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์†๋„๊ฐ€ ๋Š๋ ค์ง€์ง€๋งŒ ์ž‘์—… ์ค‘์ด๋ฏ€๋กœ ๋น ๋ฅด๊ฒŒ ์‹ฌ์ธต ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ node_modules์˜ ํŒŒ์ผ์„ ๋งŒ์ง€๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •์„ ์œ„ํ•ด ๊ฐ ํŒŒ์ผ์„ ํ™•์ธํ•˜๋ฉด ์„ค์น˜ ํ™˜๊ฒฝ์ด ๋งค์šฐ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.
์–•์€ ๊ฒ€์‚ฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด ์„ค์น˜ํ•˜๊ธฐ ์ „์— node_modules/.yarn-integrity ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ๊ณต์‹์ ์ด์ง€ ์•Š์œผ๋ฉฐ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ณต์‹์ ์ธ ๋ฐฉ๋ฒ•์€ yarn install --force ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ์„ค์น˜๋ฅผ ๊ฐ•์ œ ์‹คํ–‰ํ•˜์ง€๋งŒ ๋ถ€์ž‘์šฉ์œผ๋กœ yarn.lock์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

node_modules๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ์„ค์น˜ํ•˜๋ฉด ์ž ๊ธˆ ํŒŒ์ผ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ง ๊ทธ๋Œ€๋กœ ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์— ์žˆ๋Š” ๊ฒƒ์„ ์ •ํ™•ํžˆ ์„ค์น˜ํ•˜๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค)

ํ•œ๋™์•ˆ ์ด๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ์ด๊ฒƒ์ด ์žฌํ˜„๋  ์ˆ˜ ์žˆ์œผ๋ฉด ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ƒˆ๋กœ ์„ค์น˜ํ•œ ํ›„ package ๋˜๋Š” node_modules๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  lockfile์„ ์‚ญ์ œํ•˜๋ฉด yarn์ด ์ด๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์ „ ๋ฒ„์ „๊ณผ ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์–ผ๋งˆ ํ›„ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์ „์ด์  ์ข…์†์„ฑ์ด ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ ๋•Œ๋ฌธ์— ํ˜ธ์ด์ŠคํŒ… ๋กœ์ง ๋•Œ๋ฌธ์— node_modules์˜ ๊ตฌ์กฐ๊ฐ€ ํฌ๊ฒŒ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„ค๊ณ„๋œ ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/yarnpkg/yarn/pull/2580์— import ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๊ธฐ์กด node_modules์—์„œ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@jspiro , Yarn์€ ์ Š์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฃผ๋„ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ์ž‘์—…์„ ์œ„ํ•œ PR์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ ์›ํ•˜๋Š” ๊ธฐ๋ณธ ๋™์ž‘์„ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์„ ์–ป์„ ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ https://github.com/yarnpkg/yarn/issues/3490 ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  yarn install ์ธํ•ด ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๋™์ž‘์œผ๋กœ ์ž ๊ธˆ ํŒŒ์ผ์ด ์ตœ์ ํ™”๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ์ด ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•˜๋Š” ์ด์œ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ˆ˜๋™์œผ๋กœ package.json์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ yarn.lock ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.yarnrc์—์„œ --pure-lockfile/--frozen-lockfile์„ true๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜ ๋ช…๋ น์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

--install.pure-lockfile true

๋‚ด ๋ฌธ์ œ๋Š” ์ˆœ์ˆ˜ ์ž ๊ธˆ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ž˜๋ชป๋œ ๋ฒ„์ „์˜ ์ข…์†์„ฑ์ด ์„ค์น˜๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›์น˜ ์•Š๋Š” yarn.lock ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ๋‹จ๊ณ„์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ •๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

๋‚˜๋Š” ์ž˜ ๋•Œ์™€ ๊ฐ™์ด์ด ๋ฌผ๋ฆฐํ–ˆ๋‹ค package.json ๋ฐ yarn.lock ์œผ๋กœ ์ธํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ˆ˜๋ฅผ ํ†ตํ•ด ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋™๊ธฐ์—์„œ ๋‚˜์™”์„ npm install --save ๋Œ€์‹  yarn add .

pure-lockfile ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด์–ด์•ผ ํ•˜๊ณ  ์˜คํžˆ๋ ค frozen-lockfile ๊ฐ€ yarn install ์˜ ๊ธฐ๋ณธ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

frozen-lockfile ๋Š” yarn.lock ์™€ package.json ๊ฐ€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ frozen-lockfile ๋Š” ๋นŒ๋“œ ๋จธ์‹ (์˜ˆ: ์  ํ‚จ์Šค)์—์„œ ์˜ˆ์ƒ๋Œ€๋กœ ๋นŒ๋“œ๋ฅผ ์‹คํŒจ๋กœ ํ‘œ์‹œํ•˜๋ฏ€๋กœ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ package.json / yarn.lock์— ์ถ”๊ฐ€ํ•  ๋ฒ„์ „์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ๋ชซ์ž…๋‹ˆ๋‹ค.

yarn install ์˜ ๋ถˆํ–‰ํ•œ ๊ธฐ๋ณธ๊ฐ’์€ ์•„์ง ์ข…์†์„ฑ์— ์ž ๊ฒจ ์žˆ์ง€ ์•Š์€ ์ตœ์‹  ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ค๊ณ  ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๊ฐ€ ๋˜์ง€ ์•Š์„ ์—…๋ฐ์ดํŠธ๋œ ๋ฒ„์ „ yarn.lock ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฒ„์ „ ์ถฉ๋Œ๋กœ ์ธํ•ด ๋นŒ๋“œ๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ์ž ๊ธˆ ํŒŒ์ผ์ด ์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์š”์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ ๊ฐ™์€ ๋ช…๋ น add , remove ๋ฐ upgrade ๋ณ€์ดํ•œ๋‹ค yarn.lock .

install ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ž ๊ธด ๋ฒ„์ „์— ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ package.json ์™€ yarn.lock ์‚ฌ์ด์˜ ๋ถˆ์ผ์น˜๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. (์• ์ดˆ์— yarn.lock ์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ์—๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์‹œ๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

๋”ฐ๋ผ์„œ frozen-lockfile์€ ๋นŒ๋“œ ๋จธ์‹ (์˜ˆ: ์  ํ‚จ์Šค)์—์„œ ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋ฏ€๋กœ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

CI ๋ชจ๋“œ์— ์žˆ์Œ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@BYK ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ

์ƒˆ๋กœ ์˜คํ”ˆํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹คโ˜บ๏ธ

์ €๋Š” yarn.lock์ด package.json๊ณผ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” @thejameskyle ๋ฐ @kittens์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋งํ–ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋‹ค์Œ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ: package.json์˜ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ์ „์ฒด yarn.lock์„ ๋ฌดํšจํ™”ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. package.json ๋‚ด์—์„œ ์ˆ˜์ •๋œ ํŒจํ‚ค์ง€์˜ ์ข…์†์„ฑ๋งŒ ๋ฌดํšจํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TypeScript๋งŒ ์—…๋ฐ์ดํŠธํ•œ ๊ฒฝ์šฐ Fe๋Š” TypeScript์˜ ์ข…์†์„ฑ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹ค๋ฅธ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๊ณ ๋ ค ํฌํ•จ).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰