Yarn: package.json์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํŒจํ‚ค์ง€ ์ถ”๊ฐ€

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

package.json์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์›์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์˜ˆ : --save params์—†์ด npm ์„ค์น˜). ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์•ˆ ๋˜๋‚˜์š”?

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

๋‚˜๋Š” ์†Œ์œ ์ž๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ ์˜๊ฒฌ์ด์žˆ๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์‚ฌ์šฉ๋ฒ•์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๊ณ ํ•ด์„œ ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ ํ•„์š”๋กœํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ  ๊ทธ๋“ค์€ ๋ฐ˜๋“œ์‹œ ์–ด๋ฆฌ์„์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.
์„ ํƒ์  --no-save ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ณ  ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์•„๋‹ˆ์š”,์ด ๊ธฐ๋Šฅ์€ ์˜๋„์ ์œผ๋กœ ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. package.json์— ๋ฐ˜์˜๋˜์ง€ ์•Š๊ณ  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์กด์žฌํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๊นŒ?

Facebook ๋ฐœํ‘œ์—์„œ

npm ์„ค์น˜์˜ "๋ณด์ด์ง€ ์•Š๋Š” ์ข…์†์„ฑ"๋™์ž‘์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.๋ช…๋ น์„ ๋ถ„ํ• ํ•˜์‹ญ์‹œ์˜ค. yarn add <name> ์‹คํ–‰์€ npm install --save <name> ์‹คํ–‰๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ฝค ์ž์ฃผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋‚ด๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ž‘์—… ํ•  ๋•Œ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์ „์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ๋ฒ„์ „ ( file: dep ์ƒ์„ฑ)์„ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

npm์˜ ๊ตฌํ˜„์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ข‹์ง€ ์•Š์€ ์„ ํƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ๋ช…์‹œ ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ๋ช…์‹œ ์  ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ์—ฌ์ „ํžˆ npm i =) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ npm ํ•„์š”๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

์ด์— ํ•„์ˆ˜์  ๋ณ€ํ™”์˜๋กœ ์šฐ๋ฆฌ๋Š” ๋ช…์‹œ ์ ์œผ๋กœ์ด ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค node_module ์ดํ›„๋กœ ๋‹ฆ์•„ ๊ฒƒ yarn install ์šฐ๋ฆฌ๊ฐ€ ๊ณ ๋ ค ์ดํ›„์˜ package.json ๋ฐ yarn.lock ๋  ์ˆ˜ ์ง„์‹ค์˜ ๊ทผ์›.

Windows (libxslt)์— ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜์—†๋Š” ์ข…์†์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Windows์˜ ๊ฒฝ์šฐ : ๊ฐœ๋ฐœ์ž๋Š” node_modues์—์„œ ์••์ถ•์„ ํ’‰๋‹ˆ ๋‹ค.
  • Linux์˜ ๊ฒฝ์šฐ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค (package.json์—์žˆ๋Š” ๊ฒฝ์šฐ ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋ฏ€๋กœ Windows๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์„ค์น˜๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค)

์›์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊นจ๋—ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ (๋˜๋Š”์ด ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•)?

(ํŒจํ‚ค์ง€๊ฐ€ package.json์— ๋ฐ˜์˜๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ๋Š” ๊นจ๋—ํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค)

@GuillaumeLeclerc yarn add -D xxx ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? package.json์—์„œ ํ•ญ๋ชฉ์„ ์ง์ ‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๊นŒ?

๋‹ค์Œ์— ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ ํ•  ๋•Œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@GuillaumeLeclerc ๋ถˆํ–‰ํžˆ๋„ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

@GuillaumeLeclerc ๋Œ“๊ธ€์„ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค ...

package.json ๋˜๋Š” yarn.lock์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก yarn add --no-save ์™€ ๊ฐ™์€ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์ข…์ข… ๋ชจ๋“ˆ์„ ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

"์ตœ๋Œ€ ํ˜ธ์ถœ ์Šคํƒ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์–ด ์ผ๋ฐ˜ npm install ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์€ ์„ค์น˜ํ•˜๋Š” ์œ ์ผํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ package.json yarn.lock์œผ๋กœ ๋˜ ๋Œ๋ฆฌ์ง€ ๋งˆ์‹ญ์‹œ์˜ค!

๋‚˜๋ฅผ ์œ„ํ•ด ์ด๊ฒƒ์€ peerDep์„ ์„ค์น˜ํ•˜๋ ค๊ณ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋ฅผ ๋ฌผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Yarn์€ install ๋™์•ˆ ํ”ผ์–ด deps๋ฅผ ์„ค์น˜ํ•  ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฏ€๋กœ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. package.json / yarn.lock์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด yarn add <package> ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ง‰ํ˜”์–ด์š”.

@viveleroi ์ด๊ฒƒ์€ ์™„์ „ํžˆ ์ •ํ™•ํ•˜๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. package.json ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ํ”ผ์–ด ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋ ค๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด ๋ณต์ œ ๋•Œ๋ฌธ์— @hpurmann ๋‚ด peerDependencies ์— dependencies (๋˜๋Š” devDependencies ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ --dev ). ๊ทธ๊ฒƒ์ด ์˜๋„ ๋œ ๊ฒƒ์ด๋ผ๋ฉด ํ™•์‹คํžˆ ์ง๊ด€์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@hpurmann ๋ฐ˜์‘ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ์œผ๋ฏ€๋กœ react์€ peerDep์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋ฆฌ ์•กํŠธ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

--no-save => ์ถ”๊ฐ€ํ•˜๋ฉด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
ํŠน์ • ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ํŠน์ • ์„ ํƒ์  ์ข…์†์„ฑ์„ ๊ฑด๋„ˆ ๋›ฐ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ์‹ค๋กœ ๊ทธ๊ฒƒ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. --no-save ์˜ต์…˜๊ณผ ํ•จ๊ป˜์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

yarn link local-pkg ๋Š” ํ˜ธ์ŠคํŠธ ์•ฑ์— local-pkg์˜ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๊ฒŒ์‹œ๋˜๋ฉด local-pkg์—์„œ ๊ฐ€์ ธ ์˜ค๋ฏ€๋กœ app package.json์— ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .

๋‚˜๋Š” ์†Œ์œ ์ž๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ ์˜๊ฒฌ์ด์žˆ๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์‚ฌ์šฉ๋ฒ•์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๊ณ ํ•ด์„œ ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ ํ•„์š”๋กœํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ  ๊ทธ๋“ค์€ ๋ฐ˜๋“œ์‹œ ์–ด๋ฆฌ์„์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.
์„ ํƒ์  --no-save ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ณ  ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

AWS Lambda์—์„œ ์‹คํ–‰๋˜๋Š” NodeJS ํ”„๋กœ์ ํŠธ์— Yarn์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์ด ์ง€์›๋˜์ง€ ์•Š๋Š” ์ด์œ ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— aws-sdk๋ฅผ ์„ค์น˜ํ•ด์•ผํ•˜์ง€๋งŒ AWS Lambda๊ฐ€ ์ด๋ฏธ ํ•ด๋‹น ํ™˜๊ฒฝ์— ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ package.json ์ €์žฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. aws-sdk๋ฅผ ํฌํ•จํ•˜๋ฉด ์ตœ์ข… ํŒจํ‚ค์ง€๊ฐ€ ๋น„๋Œ€ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์›์‚ฌ ๋งํฌ์™€ ์›์‚ฌ ์ถ”๊ฐ€๋Š” ํ•จ๊ป˜ ์‚ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. yarn add๋Š” package.json์— ์˜์กดํ•˜๋Š” ๋ฐ˜๋ฉด yarn link๋Š” ๋กœ์ปฌ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Y์— ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€ X๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ X์™€ Y์˜ ๊ฐœ๋ฐœ์ž์ด๋ฏ€๋กœ X์™€ Y๋ฅผ ๋กœ์ปฌ๋กœ ์œ ์ง€ํ•˜๊ณ  Y๋ฅผ X์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. Y์— ๋Œ€ํ•œ ๋งํฌ.

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๊นŒ?

~์ด ๊ฒฝ์šฐ npm-commands๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ json ๋˜๋Š” yarn.lock ํŒจํ‚ค์ง€์— ํ’‹ ํ”„๋ฆฐํŠธ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํžˆ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

~ npm install [packages ...] --no-save --no-package-lock ~

@heikomat์ด ์•„๋ž˜์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด npm5๋Š” ์„ค์น˜ ํ›„ ์ž๋™ ์ •๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— (https://github.com/npm/npm/issues/16853 + https://github.com/npm/npm/pull/18921 ์ฐธ์กฐ) ์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ต์…˜์ด ์•„๋‹ˆ๋ฉฐ node_modules-folder๋ฅผ ์™„์ „ํžˆ ๊นจ๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜ ์ด์ œ npm ์—†์ด๋Š” ์‚ด ์ˆ˜ ์—†์–ด

๊ธฐ๋ณธ node_modules์— ๋กœ์ปฌ ํ•˜์œ„ ๋ชจ๋“ˆ์˜ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์ค‘ ํ•˜๋‚˜์—์„œ npm install ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ npm4์—์„œ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ npm5๊ฐ€ ์„ค์น˜ ์ค‘์— ์ผ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ํ•ต์œผ๋กœ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— npm5์—์„œ๋Š” ์™„์ „ํžˆ ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค -.- (https://github.com/npm/npm/pull/18921 ์ฐธ์กฐ)

๊ทธ๋Ÿฐ ์ด์œ ๋กœ ๋‚˜๋Š” ๋‚ด ์Šคํฌ๋ฆฝํŠธ์˜ npm install ๋ฅผ yarn์œผ๋กœ ๋ฐ”๊พธ๋ ค๊ณ ํ–ˆ์ง€๋งŒ, yarn์ด ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ํ•ญ์ƒ ๋กœ์ปฌ ํ•˜์œ„ ๋ชจ๋“ˆ์˜ package.jsons๋ฅผ ๊ฑด ๋“œ๋ฆฌ๋ฉด ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์กฐ์šฉํžˆ ์ง€์ €๋ถ„ ํ•ด์ง€๊ณ  ์‹ค ํ›„ "์ •๋ฆฌ"๋ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ --no-lockfile ์˜ต์…˜์ด ์žˆ์œผ๋ฏ€๋กœ node_modules ํด๋”๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ์ž๋Š” package.json์„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ์œ„ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ชจ๋“ˆ ์„ค์น˜์— ๋Œ€ํ•œ ๋…ํŠนํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•˜์ง€๋งŒ ๊ธฐ๋กํ•˜์ง€ ์•Š์„ ๋•Œ๋งˆ๋‹ค ๊ด€๋ฆฌ์ž๊ฐ€ ๋‹ค์‹œ ์™€์„œ ์‹œ๋ณด๋ ˆ๋ฅผ ์•”์†กํ•˜๋Š” ๋ฐฉ์‹์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ๋„๋•์  ์‹คํŒจ๋กœ ๊ณ ํ†ต๋ฐ›๋Š” ์‚ฌ๋žŒ๋“ค๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋งŽ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹น์‹ ์˜ ๊ณ ์ง‘์— ๋Œ€ํ•œ ์ž์‹ ๊ฐ์„ ์‰ฝ๊ฒŒ ๋Š๋‚„ ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ ˆ์ถฉ์•ˆ์œผ๋กœ ์Šค์œ„์น˜ ์ด๋ฆ„์„ --i-am-a-heritic-and-a-bad-programmer ?

yarn ๊ฐ€ npm ์—์„œ ๋ณด์กดํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ์ฃผ์š” ๊ฒฐํ•จ์„ ๋ณด๋ฉด ์•ˆํƒ€๊น๊ฒŒ๋„ ์กฐ์ง ์™ธ๋ถ€์˜ ๋ชจ๋“  ์‚ฌ๋žŒ์— ๋Œ€ํ•œ ์ ๋Œ€๊ฐ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ œ ๊ฒฝ์šฐ์—๋Š” # 4297 ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. :)
๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ์„ํ•˜๋„๋ก ์ธ์œ„์ ์œผ๋กœ ์ œํ•œํ•˜๋ฉด ํŠน์ • ์ƒํ™ฉ์—์„œ ์ œํ’ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์–ด์„œ, ๊ด€๋ฆฌ์ž. ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ์ด๋ฅผ ์‹ค์ œ๋กœ ํ•„์š”๋กœํ•˜๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š๊ณ  ์ž˜๋ชป ๋ฐฐ์น˜ ๋œ ์ฒ ํ•™์œผ๋กœ ์ง€์ ์ธ ๋Œ€ํ™”๋ฅผ ์ค‘๋‹จํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ง€๊ธˆ์€ ์ฐพ๋Š” yarn ๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธ ํ•  ํ•„์š”๊ฐ€ ์–ด๋”” ๋ชจ๋“ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํœด์‹ ์‹œ๊ฐ„ ๋‚ด ํ…Œ์ŠคํŠธ๋ฅผ require ๋‚ด๊ฐ€๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“ˆ ์ปค๋ฐ‹์ด ํ•„์š”ํ•˜๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์‹œํ—˜์—๋ฅผ ./node_modules . Yarn์€ yarn install ์‹คํ–‰ํ•  ๋•Œ ์˜ˆ์ œ ๋ชจ๋“ˆ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋” ๋งŽ์€ "์ง„์‹ค์˜ ๊ทผ์›"pedantry๋ฅผ ์ƒ๊ฐํ•œ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ : ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ์—๋Š” ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํŒ€์€์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒ€ (๋‹น์—ฐํžˆ)์€ ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ด๋ฏธ 2018 ๋…„์ด์ง€๋งŒ ์œ ํšจํ•œ ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ์ด ๊ธฐ๋Šฅ์€ ์•„์ง ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์™œ ์œ ์šฉํ•œ ์ง€ ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด :

์ƒˆ ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ ํ•œ ๋‹ค์Œ package.json / *.lock ํ•˜๊ณ  ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ๋กค๋ฐฑํ•˜์—ฌ ์ข…์†์„ฑ์„ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์„ ๊ธฐ์–ตํ•˜๊ณ  ๋‹ค์‹œ ๋ช…์‹œ ์ ์œผ๋กœ adding ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋Œ€์‹  yarn ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ ์ด ์ข…์†์„ฑ์„ ์‹ค์ œ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ "์ ˆ๋Œ€์ ์œผ๋กœ"ํ™•์ธํ•˜๊ธฐ ์ „์— ๋‹จ์ผ ์ง„์‹ค ์ง€์  ( package.json )์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ๊น”๋”ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ฝ”๋“œ๋ฅผ ๊นจ๋Š” ์ข…์†์„ฑ์ด ํฌํ•จ ๋œ package.json (์ž„์‹œ์  ์ผ์ง€๋ผ๋„)๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. yarnpkg ๋ฉ”์ธํ…Œ์ด๋„ˆ๋Š” PR์ด ์ƒ์„ฑ๋œ๋‹ค๋ฉด ๊ธฐ๊บผ์ด ๋ฐ›์•„ ๋“ค์ผ๊นŒ์š”?

์•„์ง์ด ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๋‹ค๋ฉด @kittens๋ฅผ ํ•‘ํ•ฉ๋‹ˆ๋‹ค ...

๊ทธ๋™์•ˆ package.json ์˜ scripts ์„น์…˜์—์„œ ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

"scripts": {
  "install-sneaky-package": "npm install -g sneaky-package && cp -r $(npm root -g)/sneaky-package ./node_modules/sneaky-package"
}

์›์‚ฌ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

๋Œ€์•ˆ์ด ์—†์Šต๋‹ˆ๋‹ค. npm5๋Š” ๋‚ด ์ธ์ƒ์ฒ˜๋Ÿผ ์ง€์ €๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

.bin ํด๋”์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ;)

๋‚˜์—๊ฒŒ๋Š” chmod 444 package.json ๋ฐ yarn add XXXX --no-lockfile ์ ์–ด๋„ ๋กœ์ปฌ ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€๋Š” (์˜ˆ์ƒ ๋œ) ๊ถŒํ•œ ์˜ค๋ฅ˜๋กœ ๋๋‚˜์ง€๋งŒ ์ถ”๊ฐ€ ๋œ ๋ชจ๋“ˆ์€ ๋‚˜์ค‘์— node_modules์— ์กด์žฌํ•˜๋ฉฐ ๋กœ์ปฌ์— ์„ค์น˜๋œ ํ”ผ์–ด ์ข…์†์„ฑ์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ package.json์—๋Š” ์œ ์ง€๋˜์ง€ ์•Š์ง€๋งŒ ํ”ผ์–ด ์ข…์†์„ฑ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋•Œ๋•Œ๋กœ why-is-node-running ์™€ ๊ฐ™์€ ๋””๋ฒ„๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ด๊ณ  --no-save ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข…์†์„ฑ์„ ์˜ค์—ผ์‹œํ‚ฌ ์œ„ํ—˜์—†์ด ์„ค์น˜ํ•˜๊ณ  ์žŠ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Lerna๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๋ฏธ ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋นŒ๋“œ๋˜๊ณ  ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ์œผ๋ฏ€๋กœ ๊ฒŒ์‹œ ๋‹จ๊ณ„๋ฅผ ์œ„ํ•ด CI ๋‹จ๊ณ„ ์ค‘ ํ•˜๋‚˜์— _only_ Lerna๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์œ ํšจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๊นŒ?

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ช‡ ๋‹จ๊ณ„๋ฅผ ์ ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด node_modules ์€ ์–ด์จŒ๋“  .gitignore์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‹ ์—:

git clone external-package (needed for temp testing only)
yarn install
yarn link

๋‚ด ์›๋ž˜ ์ €์žฅ์†Œ๋กœ ๋Œ์•„ ๊ฐ€๊ธฐ
yarn link external-package

๋‹ค๋งŒ:
์›๋ณธ ์ €์žฅ์†Œ :
yarn install external-package --no-save

๋นŒ๋“œ ํŒŒ์ดํ”„ ๋ผ์ธ์˜ ์ผ๋ถ€๋กœ nsp๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜์—ฌ dependency-check.xml์„ ๋‚ด ๋ณด๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ„๋‹จํ•œ ๋„๊ตฌ ์„ค์น˜๊ฐ€ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์— ๋ฐ˜์˜๋˜์–ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ๋ฅผ ํ‘ธ์‹œํ•˜๊ธฐ ์ „์— ์ˆ˜์ •์„ ์ทจ์†Œํ•˜๊ธฐ ์œ„ํ•ด git checkout ${BRANCH_NAME} ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ทธ๊ฒƒ์€ ๋‚ด ์‚ฌ์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚ด ์กฐ์ง์˜ ๊ฐœ๋ฐœ ํŒ€์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”์ƒ์  ์ธ ์ฒ ํ•™ ๋•Œ๋ฌธ์— ์ œ ์‚ถ์„ ์กฐ๊ธˆ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ  ๊ณ„์‹ญ๋‹ˆ๋‹ค. ๋ฉˆ์ถฐ.

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๊ฒฐ ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? --no-save ์Šค์œ„์น˜๊ฐ€ PR์— ์ถ”๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์ข…์†์„ฑ์—์„œ ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์˜ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ์˜์กด์„ฑ์— ์˜ํ•ด ๊ฐ€์ ธ์˜จ @types/sinon ๋Š” ์ตœ๊ทผ์— ๋‚ด tsc๋ฅผ ๊นจ๋œจ ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‚ด dev ์ข…์†์„ฑ์— @types/sinon ์„ (๋ฅผ) ์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ณ„์† ์ž‘์—… ํ•  ์ˆ˜ ์žˆ๋„๋ก yarn add @types/[email protected] --no-save ๋ฒ„์ „์„ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  npm์œผ๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ์‹ค๋ง ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ๋ณ„ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ž์ฒด๋ฅผ ํ•ดํ‚นํ•˜๋Š” ํ”„๋กœ๋•์…˜ ์ „์šฉ ์ข…์†์„ฑ (์•ฑ ์—ญํ•™)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋จธ์‹ ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. yarn add ... --no-save ์ถ”๊ฐ€ํ•˜๋ฉด package.json์„ ์œ„ํ—˜์— ๋น ๋œจ๋ฆฌ๋Š” ์Šคํฌ๋ฆฝํŠธ์—†์ด ๊น”๋”ํ•˜๊ฒŒ ๋ฐฐํฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํŠนํžˆ package.json์€ ๊ฐ ์Šคํฌ๋ฆฝํŠธ ๋‚˜ ์ข…์†์„ฑ์˜ ๋ชฉ์ ์„ ์„ค๋ช…ํ•˜๋Š” ์ฃผ์„์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—).

cc @kittens @hpurmann

์ด ๋งค์šฐ ์ธ๊ธฐ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜ ํ•ด๊ฒฐ ๋œ๋Œ€๋กœ ์ž ๊ทธ์‹ญ์‹œ์˜ค. ์œ„์—์„œ ์ œ๊ธฐ ๋œ ๋ชจ๋“  ๋น„ํŒ์— ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์ธ ๋‹ต๋ณ€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š”์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณต ํ•  ์ค€๋น„๊ฐ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ’€ ์š”์ฒญ์„ ์ˆ˜๋ฝ ํ•  ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ•˜ํ•˜, ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์Œ, niiiiice

์™œ ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์กด์žฌํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๊นŒ?

์‚ฌ๋žŒ๋“ค์ด JSX์— ๋Œ€ํ•ด ์ฒ˜์Œ์— ํ…œํ”Œ๋ฆฟ๊ณผ ๋กœ์ง์„ ํ˜ผํ•ฉํ–ˆ์„ ๋•Œ ๋งํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋˜‘ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•˜๊ณ  ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์งˆ๋ฌธ์€ ์™œ ์•ˆ ๋˜๋Š”๊ฐ€? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ”Œ๋ž˜๊ทธ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ธฐ๋ณธ ๋™์ž‘์ด ์•„๋‹ˆ๋ฏ€๋กœ yarn์—๊ฒŒ ๋ช…์‹œ ์ ์œผ๋กœ ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ
๋ฐ˜์‘์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋“ค์€ ์„œ๋กœ์— ๋Œ€ํ•œ ํ•˜์œ„ ๋ชจ๋“ˆ ์ข…์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” react ๋ฐ react-dom์„ peer-dep๋กœ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•  ๋•Œ react ๋ฐ react-dom์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ์ด ํŒจํ‚ค์ง€๋ฅผ dep๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ๋กœ ์„ค์น˜ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ๊ทธ๋ ‡๊ฒŒ ์‚ฌ์†Œํ•œ ์šฉ๋„๋กœ npm์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
--no-save ์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ชจ๋“  ์—…๋ฐ์ดํŠธ.
๊ฐœ๋ฐœ์ž๊ฐ€ ๋ถ€์ž‘์šฉ์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์š”๊ตฌํ•˜๋ฉด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ํ•ด๊ฐ€์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (์–€ ์„ค์น˜๋ฅผ ์‹คํ–‰ํ•˜์ž๋งˆ์ž ๋กœ์ปฌ ํŒจํ‚ค์ง€๊ฐ€ ์†์‹ค ๋จ).
๊ฐ์‚ฌ

ํŽธ๋ฆฌํ•œ ํŠธ๋ฆญ์€ yarn add --dev pkg && yarn remove pkg ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ์ผ์„ํ•ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์€ ์ด์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ @Legends๊ฐ€ ์ด์ „์— ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๊ฐ•์กฐ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ณ„๋„์˜ ํด๋”์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ถ”๊ฐ€๋˜์—ˆ์„ ์œ„์น˜์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ yarn link ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cd /third-party
yarn add foo
cd node_modules/foo
yarn link

cd /my-project
yarn link foo

@silentorb ํ™•์‹คํžˆ ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค, imho. add + remove ๋Š” npm์—์„œ --no-save ๋˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๋งํฌ๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š์œผ๋ฉฐ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋‚˜์œ ๋ฐฉ์‹์œผ๋กœ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, yarn remove ์ดํ›„์—๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ทธ ์ผ์„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ™•์‹คํžˆ dirs, linking ๋“ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฐˆ ๊ธธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฒฝ์šฐ

์˜ˆ๋ฅผ ๋“ค์–ด? ํ™•์‹คํžˆ ์ด์ƒํ•œ ๊ฒƒ๋“ค์€?

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ

๊ทธ๋ ‡๋‹ค๋ฉด ํ”ผ์–ด ์ข…์†์„ฑ์ด์žˆ๋Š” ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด React๊ฐ€ ๋‚ด ํŒจํ‚ค์ง€์— peerDependency๋กœ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด devDependency๋กœ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb/package.json์„ ๋ณด๋ฉด ๋Œ€๋‹ต์€ '์˜ˆ'๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ 18steps ํ™•์ธ https://www.npmjs.com/install-peers

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

CI ๋ผ์ดํ”„ ์‚ฌ์ดํด์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฆฌํฌํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ package.json ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์œผ๋ฉฐ NPM ๊ฒŒ์‹œ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์ด ์„ ํƒ์€ ๋„๊ตฌ๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœ์ž ์ž์‹ ์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ž, ์ด๊ฒƒ์„ ์œ ์ง€ ๊ด€๋ฆฌ์ž์˜ ๊ด€์ ์—์„œ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ˆœ์ง„ํ•œ --no-save ์†”๋ฃจ์…˜์˜ ๋‹จ์ ์„ ํ™•์‹คํžˆ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ ์•„์ฃผ ์ฒ ์ €ํ•œ ์„ค๋ช…์„ ์–ป์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๊ฐ•์ฒ  ๋‚จ์ž๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋‚˜๋ฅผ ๋ฐ”๋กœ ์žก์„ ์ˆ˜์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ํƒ€ํ˜‘์„ ์ฐพ์„ ์ˆ˜์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ

(์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์˜๋„ ํ•œ ๊ฒƒ๋ณด๋‹ค ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

์ตœ์‹  ๋…ธ๋“œ ๋ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ข…์†์„ฑ ๊ด€๋ฆฌ๋Š” ์•ฝ๊ฐ„ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์•ˆ์ •์ ์ธ ์ž๋™ํ™”์™€ ์ผ์ • ์ˆ˜์ค€์˜ ์ œ์–ด ๋ฐ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋ชจ๋‘ ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

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

Yarn์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ œํ•œ๋œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ node_modules ์˜ ๋ณต์žก์„ฑ์„ ์บก์Šํ™”ํ•ฉ๋‹ˆ๋‹ค. ์บก์Šํ™”๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ฒ ๋‹ค๊ณ  ์•ฝ์†ํ•˜๋ฉด ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ์™€ ๊ฐ™์€ ํŠน์ • ๋ณด์ฆ์„ ๋ฐ›๊ฒŒ๋ฉ๋‹ˆ๋‹ค. package.json ๋ฐ yarn.lock ํ•ด๋‹นํ•˜๋Š” ๋ณ€๊ฒฝ์—†์ด node_modules ์„ ์„ค์น˜ํ•˜๋ฉด ํ•ด๋‹น ๋ณด์ฆ์„ ์žƒ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ํƒ€ํ˜‘ํ•ด์•ผํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฌ๊ธฐ์— ๋ถ„๋ช…ํ•œ ํ•„์š”๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ฃผ์„์— ๋‚˜์—ด๋œ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ '์ข‹์•„์š”'/ '์‹ซ์–ด์š”'๋น„์œจ์„ ์‚ดํŽด๋ณด์„ธ์š”. ์ด๋Ÿฌํ•œ ์ผ๋ฐฉ์  ์ธ ๋ฐ˜์‘์— ์ง๋ฉด ํ•œ ๊ด€๋ฆฌ์ž์˜ ๋ช…๋ฐฑํ•œ ๊ณ ์ง‘์€ Yarn์„ ๋„ˆ๋ฌด ์ข‹์•„ ๋ณด์ด๊ฒŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋‘์—๊ฒŒ ํšจ๊ณผ๊ฐ€์žˆ์„ ์ˆ˜์žˆ๋Š” ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒˆ ํŒŒ์ผ yarn.local.lock . ๊ฐœ๋ฐœ์ž๋Š”์ด๋ฅผ .gitignore ์— ๋„ฃ๊ณ  --no-save ํ”Œ๋ž˜๊ทธ์™€ ํ•ด๋‹น ์ข…์†์„ฑ์œผ๋กœ ์„ค์น˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€์˜ ๊ธฐ๋ก์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

    yarn.lock ์„ ์ด๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด '๋กœ์ปฌ'์ข…์†์„ฑ ํŠธ๋ฆฌ์˜ ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ํ‰๋ฉดํ™”๊ฐ€ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ž ๊ธˆ ํŒŒ์ผ์€ ๊ธฐ๋ณธ ์ž ๊ธˆ ํŒŒ์ผ์˜ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์กฐ์ •๋  ์ˆ˜ ์žˆ์ง€๋งŒ (์ด ๊ฒฝ์šฐ ์ค‘๋ณต ์ œ๊ฑฐ) ๊ทธ ๋ฐ˜๋Œ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋งŽ์€ ์ „ ์ด์  ๋กœ์ปฌ ์ข…์†์„ฑ์ด node_modules ๋กœ ํ‰๋ฉดํ™”๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ด ์†”๋ฃจ์…˜์„ ํ†ตํ•ด Yarn์€ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ๊ณ„์† ์ถ”์  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ์ž๋Š” ์ €์žฅ์†Œ๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ  ํ•ญ๋ชฉ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ๋ฅผ ๋ณด์กด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ( devDependencies ์„น์…˜์ด์žˆ๋Š” package.local.json ๊ณต๊ฐ„๋„ ์žˆ์ง€๋งŒ ํ•„์ˆ˜ ํ•ญ๋ชฉ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.)

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

๋ญ”๊ฐ€ ๋†“์ณค์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๊ฑด ๊ฐ€์น˜์žˆ๋Š” ๋Œ€ํ™” ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. REPL์—์„œ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜์ง€๋งŒ ๋‚ด ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์˜๋„๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๋‹ค๋ฅธ ํด๋”๋กœ ์ด๋™ํ•˜์—ฌ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์„ค์น˜ ํ•œ ๋‹ค์Œ ../other-project/data/xyz.json ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ json ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๊ณ  ๊ทธ๊ฒŒ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ ์˜ค๋ฉด ๊นจ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €์žฅํ•˜์ง€ ์•Š๊ณ  node_modules ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๋ฉด ํ›จ์”ฌ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ด€๋ฆฌ์ž๋“ค์ด์ด ์•„์ด๋””์–ด์— ์–ผ๋งˆ๋‚˜ ์ €ํ•ญํ•˜๋Š”์ง€ ๋†€๋ž๋‹ค.

๋ง™์†Œ์‚ฌ, ๋ฐฉ๊ธˆ ์ด์ „ ์˜๊ฒฌ์„ ์ฝ์—ˆ์œผ๋ฉฐ ์œ ์ง€ ๋ณด์ˆ˜์˜ ํƒœ๋„๊ฐ€ ์‹ค๋ง ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„ ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด์žˆ๋Š” ๋งŽ์€ ํ”„๋ ˆ์ž„ ์›Œํฌ ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์ด๋Ÿฌํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ•˜๋“œ ์ข…์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

๋‚ด๊ฐ€ ์ฐพ์€ ์œ ์ผํ•œ ํ•ด๊ฒฐ์ฑ…์€ peerDepencies ๋ฅผ devDependencies ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ „ํ˜€ ์ด์ƒ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋”์ฐํ•œ ์ƒํƒœ์˜ npm ์€ package.json ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ

์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํฌ๊ธฐ ํ–ˆ์Šต๋‹ˆ๊นŒ? ๋ถ„๋ช…ํžˆ์ด ๋ฌธ์ œ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ํ˜ธ์˜๋ฅผ ๋ฒ ํ‘ธ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ž‘์—…์„ํ•˜๊ณ  PR์„ ์ œ์ถœํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ด๊ฒƒ์„ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ๋ฌด์Šจ ์†Œ์šฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์•„๋งˆ๋„ @viveleroi๊ฐ€ ๊ทธ์˜ ์•„์ฃผ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•œ ์งํ›„์— ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค. ๊ทธ ๋‹น์‹œ ๋‚˜๋Š” ๊ทธ์˜ ๋Œ€๋‹ต์„ ์—„์ง€ ์†๊ฐ€๋ฝ์œผ๋กœ ์น˜์ผœ ์„ธ์› ๋Š”๋ฐ, ๊ทธ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ์ฃผ๋ชฉ ๋ฐ›๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋งˆ์Œ์„ ๋ฐ”๊ฟจ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์€ ๋งŽ์€ ๊ฒƒ์„ ์›ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ˆ˜์šฉํ•˜๋ฉด ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋ถ€ํ’€์–ด ์˜ค๋ฆ…๋‹ˆ๋‹ค. ์ด ์œ ์Šค ์ผ€์ด์Šค๋Š” ์—†์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†๋‹ค. ์ €๋Š”์ด ํ”„๋กœ์ ํŠธ์˜ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@Vheissu yarn add --peer <dep> ์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋ฅผ ์œ„ํ•ด ์›์‚ฌ ์ถ”๊ฐ€-ํ”ผ์–ด๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ ํ•  ๋•Œ๊นŒ์ง€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.์ด ์‹œ์ ์—์„œ ๊ธฐ์กด ํ”ผ์–ด dep๊ฐ€ ๋กœ์ปฌ ์„ค์น˜์—์„œ ์ œ๊ฑฐ๋˜๊ณ  ์ˆ˜๋™์œผ๋กœ ์ฝ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ express๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ˆ์ œ ๊ตฌํ˜„์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋‚ด ์ฝ”๋“œ๋Š” express์— ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—์ด ๊ธฐ๋Šฅ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. Express๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์ง€๋งŒ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@ brendan-hurley @suyanhanx ์ฒ˜๋Ÿผ ๋กœ์ปฌ์ด ์•„๋‹Œ CI์— ์„ค์น˜ํ•˜๋ ค๋Š” ์ข…์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋กœ์ปฌ ์ข…์†์„ฑ์„ ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•˜์—ฌ node_modules ์„ (๋ฅผ) ๋ถ€ํ’€๋ ค์„œ ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—…ํ•˜๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋„๋กํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

CI์—๋Š” ํ•„์š”ํ•˜์ง€๋งŒ ๋กœ์ปฌ์ด ์•„๋‹Œ ํŒจํ‚ค์ง€ :

  • CI ํŠน์ • ๋„๊ตฌ : ์‹œ๋งจํ‹ฑ ๋ฆด๋ฆฌ์Šค, ๊ทธ๋ฆฐ ํ‚คํผ ์ž ๊ธˆ ํŒŒ์ผ
  • ์ปค๋ฒ„๋ฆฌ์ง€๋ณด๊ณ  ๋„๊ตฌ : codacy-coverage, ์ž‘์—…๋ณต
  • CI ์šฉ ํ…Œ์ŠคํŠธ๋ณด๊ณ  ๋„๊ตฌ : jest-junit ๋“ฑ

์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

yarn link ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŒจํ‚ค์ง€์˜ ์ข…์†์„ฑ์ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค์Œ ์œ„์น˜์— ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์—ฐ๊ฒฐ๋œ ๋Œ€์ƒ-์ด๋Ÿฌํ•œ ์™ธ๋ถ€ ์ข…์†์„ฑ์„ package.json ์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋„ˆ๋ฌด ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค.

yarn link ๋Š” ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ƒ package.json ์—์„œ ์ œ์™ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฝค ๋‚œํ•ดํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. yarn.lock ๋ฐ package.json ์ด (๊ฐ€) ์ง„์‹ค์˜ ์›์ฒœ์ด๋˜๋Š” ๊ฒƒ์ด ์™œ ์ค‘์š”ํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  --no-save ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ›„์† yarn ์—์„œ ์ง€์›Œ์ง„๋‹ค๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, yarn ๊ฐ€ ๋‚ด๊ฐ€ํ•˜๋Š” ์ผ์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๋ฏฟ๊ณ  --no-save ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฑ…์ž„์„ ์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค. :๋ฏธ์†Œ:

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€?
๋‚˜๋Š” 64 ๋น„ํŠธ ์œˆ ๋จธ์‹ ์„ ์‹คํ–‰ํ•œ๋‹ค.
Prod ๋จธ์‹ ์€ 32 ๋น„ํŠธ์ž…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๋Š” ํ•œ 32 ๋น„ํŠธ ๋งŒ ์ง€์›ํ•˜๋Š” Node-sass ์ข…์†์„ฑ.

dev ์‹œ์Šคํ…œ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด package.json ๋˜๋Š” yarn.lock์˜ ์ข…์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ 64 ๋น„ํŠธ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์‹  node-sass๋ฅผ ๋กœ์ปฌ๋กœ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์ง€๋งŒ package.json ๋ฐ yarn.lock์—๋Š” ์˜ํ–ฅ์„์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

VSCode์—์„œ ๋” ๋‚˜์€ ์ž๋™ ์™„์„ฑ์„ ์œ„ํ•ด package.json / yarn.lock ๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋น„ TypeScript ํ”„๋กœ์ ํŠธ์— @types/* ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹ค ์ž‘์—… ๊ณต๊ฐ„๊ณผ ํ•จ๊ป˜ lerna๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
@ types / [email protected] ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด Antd์˜ ์œ ํ˜• ์ •์˜๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
Antd๋Š” ์ฃผ๋ง์—์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ํ˜„์žฌ package.json์— ์˜ํ–ฅ์„์ฃผ์ง€ ์•Š๊ณ  ์ˆ˜๋™์œผ๋กœ @ types / [email protected] ์˜ ๊ณ ์ • ๋ฒ„์ „์„ workspaceRoot์— ์„ค์น˜ํ•˜๋„๋ก ์›์‚ฌ๋ฅผ ๊ฐ•์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์ตœ์‹  ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—).

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

์•”์‹œ ์ ์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์•”์‹œ ์ ์œผ๋กœ package.json์— ์ €์žฅํ•˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” React ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์„ ๊ฒŒ์‹œํ•˜๊ธฐ ์ „์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ react ๋ฐ react-dom ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—ญ๋ฐฉํ–ฅ ๋ฐ ์ •๋ฐฉํ–ฅ ( @next ) ํ˜ธํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ ์ด์ œ Yarn์˜ ์ž‘์—… ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฏ€๋กœ Yarn์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

"test:backwards": "npm i [email protected] [email protected] --no-save && npm test",
"test:forwards": "npm i react<strong i="9">@next</strong> react-dom<strong i="10">@next</strong> --no-save && npm test",
"test:latest": "npm i react<strong i="11">@latest</strong> react-dom<strong i="12">@latest</strong> --no-save && npm test",
"test:compat": "npm run test:backwards && npm run test:forwards && npm run test:latest"

์ด ์Šคํฌ๋ฆฝํŠธ๋กœ package.json ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฒŒ์‹œ ๋ช…๋ น ( pack publish )์ด ์ค€๋น„๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์‹คํŒจํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

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

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

๋˜ํ•œ npm์ด ํ•  ์ˆ˜์žˆ๋Š” ์ผ์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— npm์„ ์™„์ „ํžˆ ๋Œ€์ฒด ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์•ฝ์†์„ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค.

๋˜ํ•œ์ด ๊ธฐ๋Šฅ์€ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฃ์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์—ฌ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ํ”Œ๋ž˜๊ทธ ๋’ค์—์ด ๊ธฐ๋Šฅ์„ ์ ˆ๋Œ€์ ์œผ๋กœ ์ˆจ ๊น๋‹ˆ๋‹ค.

๋†๋‹ด ํ•ด? ๊ฐ„๋‹จํ•œ ์Šค์œ„์น˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ 3 ๋…„์ด ๊ฑธ๋ฆฌ๋‚˜์š”?

๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€ : ์‚ฌ์ „ ์ปค๋ฐ‹ ํ™•์ธ์„ ์œ„ํ•ด npm ํŒจํ‚ค์ง€ ( git-hoooks )๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŒ€์˜ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ package.json์— ํฌํ•จํ•˜๋ฉด ์ผ๋ถ€ ์‚ฌ์šฉ์ž์˜ ์ปค๋ฐ‹์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ git-hooks๋ฅผ ์„ค์น˜ / ์ œ๊ฑฐํ•˜์—ฌ ์ผ์‹œ์ ์œผ๋กœ ํ›„ํฌ๋ฅผ ํ™œ์„ฑํ™” / ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” npm ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ‰๋ณด๊ธฐ์— ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฌ์šด ์ž‘์—…์ด ์‹ค๋กœ ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์–ด ๋งค์šฐ ์‹ค๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

yarn.lock์ด ๋” ์ด์ƒ node_modules์˜ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ง„์‹ค์˜ ์›์ฒœ์ด๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์ด ๊ฑฑ์ •๋œ๋‹ค๋ฉด, ๋ญ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋‚˜์ ๊นŒ์š”? ๊ธฐ์กด ํ•จ์ˆ˜๊ฐ€ ์ถ”์ ๋˜์ง€ ์•Š์€ ์ข…์†์„ฑ์˜ ์กด์žฌ๋ฅผ ๋‹จ์ˆœํžˆ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๊นŒ? Yarn์€ ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์ด๋ฉฐ ๋ฉ”์ธํ…Œ์ด๋„ˆ๋Š” JS ์ปค๋ฎค๋‹ˆํ‹ฐ์— ํ›Œ๋ฅญํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ–ˆ์ง€๋งŒ์ด ๊ฒฐ์ •์„ ์žฌ๊ณ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋†๋‹ด ํ•ด? ๊ฐ„๋‹จํ•œ ์Šค์œ„์น˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ 3 ๋…„์ด ๊ฑธ๋ฆฌ๋‚˜์š”?

@spanasik ๋ฐ @Ryuurock : ๋ฌด๋ฃŒ๋กœ ์ œ๊ณต๋˜๋Š” ๊ณ ํ’ˆ์งˆ ์†Œํ”„ํŠธ์›จ์–ด์— ๋Œ€ํ•ด ๋…ผ์˜ ํ•  ๋•Œ ์˜ˆ์˜๋ฅผ

์Šค์œ„์น˜๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— "3 ๋…„"์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ์ด๊ฒƒ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ˆœ์ด์ต์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด์— ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ฃผ์žฅ์„ํ•˜์‹ญ์‹œ์˜ค.

@NickHeiner ์—ฌ๊ธฐ์— 10 ๊ฐœ์˜ ์ธ์ˆ˜ ํ™”๋ฉด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ขŒ์ ˆ๊ฐ์„ ์œ ๋ฐœํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ ๋ฌด์‹œํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด "์ด์— ๋™์˜ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋…ผ์Ÿ์„ ํ•  ๋•Œ"๋…ผ์Ÿ์— ์‘๋‹ตํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์ขŒ์ ˆํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋ถˆ์พŒํ•œ ๋ง์„ ๋‚จ๊น๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ชจ๋“  ๊ฒƒ์„ ํƒ“ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋…„์— ๊ฑธ์ณ ๊ด‘๋ฒ”์œ„ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ๊ด€์‹ฌ์ด ๋ถ„๋ช…ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋งˆ๋„ @spanasik ๊ณผ @Ryuurock ์ด ๋‹จ์ง€ "

๊ทธ๋ฆฌ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์ขŒ์ ˆํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋ถˆ์พŒํ•œ ๋ง์„ ๋‚จ๊น๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ชจ๋“  ๊ฒƒ์„ ํƒ“ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌด๋ก€ ํ•จ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์œ ์šฉํ•œ ์ง„์ „์ด ์•„๋‹ˆ๋ฉฐ ์„ฑ์ธ๋“ค ์‚ฌ์ด์—์„œ ์šฉ์ธ๋˜๋Š” ํ–‰๋™๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌด๋ก€ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ด๊ฒƒ์„ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์„ ์ •๋‹นํ™”ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค : "์“ฐ๋ ˆ๋“œ๋Š” ๋‹จ์ง€ ํŠธ๋กค์ž…๋‹ˆ๋‹ค".

๋ฐœ์ „์„์œ„ํ•œ ๊ฑด์„ค์ ์ธ ๋ฐฉ๋ฒ• :

  1. ๋‹ค๋ฅธ ์ฑ„๋„์—์„œ์ด ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž์˜์ฃผ์˜๋ฅผ ๋Œ๊ณ  (์•„๋งˆ๋„ ๋ฌด์‹œํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค) ๋™์˜ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ ์–ด๋„ ์—ฌ๊ธฐ์„œ ์ฃผ์žฅ์„ ์ธ์ •ํ•˜๋„๋ก ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค.
  2. ์›์‚ฌ๋ฅผ ํฌํฌ / ๊ต์ฒดํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์ด ๋” ํ–‰๋ณตํ•œ ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํŽธ๋ฆฌํ•œ ํŠธ๋ฆญ์€ yarn add --dev pkg && yarn remove pkg ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ์ผ์„ํ•ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์€ ์ด์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋จ-์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ผ๋ถ€ ํŒจํ‚ค์ง€์—๋Š” 'require'๋กœ๋กœ๋“œ๋˜๋Š” ์„ ํƒ์  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ devDependencies ์„น์…˜์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 'yarn add my-add-in'์„ ์ˆ˜ํ–‰ํ•˜๊ณ  package.json ํŒŒ์ผ์—์„œ ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํด๋ผ์šฐ๋“œ CI ํŒŒ์ดํ”„ ๋ผ์ธ์—์„œ 'npm i'๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (ํ…Œ์ŠคํŠธ ์šฉ). ๋‚ด ๋กœ์ปฌ ํŒŒ์ดํ”„ ๋ผ์ธ์—์„œ ์ถ”๊ฐ€ ์ž ๊ธˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— npm์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ npm์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ์ž ๊ธˆ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ง„์‹ค์˜ ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด).

๊ทธ๋ž˜์„œ ๋ชจ๋“  ๊ฒƒ์„ ์ฝ์€ ํ›„ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋‚ด ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์™œ ๊ทธ๋ ‡๊ฒŒ ์ผ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๊นŒ?
  • ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ†ตํ•ด์ด ์ฒ ํ•™์„ ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ์š”?

    • ์ฆ‰, ์šฐ๋ฆฌ ๋ชจ๋‘๋ฅผ ์œ„ํ•ด ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๊ณ  ๋ชจ๋“  ๊ธฐ๋Šฅ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์˜ต์…˜์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ์ฝ”์Šค๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค! ํ•ญ์ƒ ์ง„์‹คํ•˜๋ผ!

๋ถ€์ธํ•  ์ˆ˜์—†๋Š” ์‚ฌ์‹ค์€ ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์ƒํ™ฉ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฒƒ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด์—๋Š” ๊ตฌ์„ฑ ์„ค์ •์ด ์žˆ๋‹ค๋Š”

๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์„ ์ •๋ง ์ข‹์•„ ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ผ์„ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋Š๋ฆฌ๊ฒŒ ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” npm์œผ๋กœ ๋˜๋Œ๋ ค ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ์ž๊ฐ€ ํ™•์‹คํžˆ ํ’€์–ด์•ผ ํ•  ์ „ํˆฌ์— ๋งž์„œ ์‹ธ์šฐ๋Š” ๊ฒƒ์€ ์ •๋ง ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

์˜จ๋„๋ฅผ ์กฐ๊ธˆ ๋‚ฎ์ถ”์ž. ์•„๋ฌด๋„ ํ˜์˜ค๊ฐ์„ ๋Š๋‚„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค.

On Wed, Jan 15, 2020 at 23:17 Hajime Yamasaki Vukelic <
[email protected]> ์ž‘์„ฑ :

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

์™„๋ฒฝํ•œ ๊ทœ์น™์„ ๋ฏฟ๊ณ  ์ ˆ๋Œ€๋กœ
๊ทธ๋“ค์„ ๊นจ๋Š” ๊ฒƒ์€ ์ˆœ์ง„ํ•ฉ๋‹ˆ๋‹ค. "๋ชจ๋ฒ” ์‚ฌ๋ก€"์™€
"do-or-die". Oliver Wendell Holmes Sr.๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

์ Š์€์ด๋Š” ๊ทœ์น™์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋…ธ์ธ์€ ์˜ˆ์™ธ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/yarnpkg/yarn/issues/1743?email_source=notifications&email_token=AAGKTAZRWD3XJQEGH5N5RL3Q6ACZNA5CNFSM4CVUKFMKYY3PNVWWK3TUL52HS4DFWSVREXG43ZLO17586 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAGKTAZSB4FNAIFLZIL547LQ6ACZNANCNFSM4CVUKFMA
.

์ž์‹ ์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ์•„๋ฌด๋„ ๋‹น์‹ ์ด ์•„๋ฌด๊ฒƒ๋„ํ•˜๋„๋ก ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ „ํ˜€ ํ™”๋ฅผ ๋‚ด์ง€ ์•Š๊ณ  ๋…ผ๋ฆฌ์˜ ์˜ค๋ฅ˜๋ฅผ ์ง€์ ํ•˜์‹ญ์‹œ์˜ค.

์‹ค์€ ๋‚˜๋ฅผ ํŠน์ •ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ผํ•˜๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

Yarn์€ ๋‹น์‹ ์ด ์•„๋ฌด๊ฒƒ๋„ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋„๊ตฌ (๋ฌด๋ฃŒ)๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ  ๊ทธ๊ฒƒ์€ ํŠน์ •ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

@foxbunny ํ˜์˜ค๊ฐ์„ ๋ช…ํ™•ํžˆ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :)

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

@whitecolor ํŒ€์ด ํฌ์ธํŠธ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์˜ต์…˜ --save๋Š” ์–ด๋ฆฌ ์„์Šต๋‹ˆ๋‹ค. Yarn์€ node_modules, package.json ๋ฐ ์ž ๊ธˆ ํŒŒ์ผ ๊ฐ„์˜ ํ‰ํ˜•์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค .... npm --save๋Š” ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฒˆ ๋‚˜๋ฅผ ์‹ค๋ง ์‹œ์ผฐ์–ด

์ œ๋ฐœ ๊ทธ๋งŒํ•ด

์•„๋‹ˆ๋ฉด ๋ชจ๋‘๊ฐ€ ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ง„์ •๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š”

์•ฑ์˜ ํ•˜์œ„ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์ด ์ข…์†์„ฑ์„ yarn link
๊ทธ๋Ÿฐ ๋‹ค์Œ ์•ฑ์—์„œ ์—ฐ๊ฒฐ๋œ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
yarn install (wtf no.1) ์ดํ›„ ๋ฉ”์ธ ์•ฑ์— lib ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ์•ฑ์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์‹ ์†ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜๋ฉด lib์— ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๊ธฐ ์ „์— ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ-์•„๋‹ˆ์š”.

๊ฐ์‚ฌ

์ž‘์„ฑ์ž๊ฐ€ ๋ฌด์‹œํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋ณด๋‹ˆ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

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

2020 ๋…„ 3 ์›” 3 ์ผ ํ™”์š”์ผ 03:53 Artur Kwiatkowski [email protected]
์ผ๋‹ค :

์ž‘์„ฑ์ž๊ฐ€ ๋ฌด์‹œํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋ณด๋‹ˆ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/yarnpkg/yarn/issues/1743?email_source=notifications&email_token=AAGKTA4K3STUMXFRUDMPJU3RFTVTLA5CNFSM4CVUKFMKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNENTG939XHJKTDN5W939XHJJKTDNM
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAGKTA7WL4R3R47HBU6EPI3RFTVTLANCNFSM4CVUKFMA
.

์ €๋Š” Lerna๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๋ฏธ ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋นŒ๋“œ๋˜๊ณ  ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ์œผ๋ฏ€๋กœ ๊ฒŒ์‹œ ๋‹จ๊ณ„๋ฅผ ์œ„ํ•ด CI ๋‹จ๊ณ„ ์ค‘ ํ•˜๋‚˜์— _only_ Lerna๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์œ ํšจํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๊นŒ?

^ ๋‚ด ์›๋ž˜ ์˜๊ฒฌ-์†”์งํžˆ ์™œ ์ด๊ฒƒ์ด ํ•„์š”ํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ๊ณ ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋”์ฐํ•˜๊ฒŒ ๋‚ ์•„๊ฐˆ ์ค„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋ช‡ ๋…„ ๋™์•ˆ ์ด๋ฉ”์ผ์„ ๋ณด๋Š” ๊ฒƒ์€ ์žฌ๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์—์žˆ๋Š” ๊ด€๋ฆฌ์ž๋“ค๊ณผ ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‚˜๋Š” ๋‚ด ์ฃผ์žฅ์— ํ™•์‹ ์ด ์—†๋‹ค. ๋‚˜๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ์–ด๋ฆฌ์„์€ ์ฃผ์žฅ์ด๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š๊ณ  ์˜ˆ์˜ ๋ฐ”๋ฅด๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ PR์„ ์ œ๊ธฐํ•œ๋‹ค๊ณ ํ•˜๋”๋ผ๋„ ๊ธฐ๋Šฅ์˜ ์ง€์†์ ์ธ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌ ๋‹ด๋‹น์ž์—๊ฒŒ ๋” ํฐ ๋ถ€๋‹ด์ด๋˜์–ด ํ•ต์‹ฌ ์ œํ’ˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  3. ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๊ธฐ๋Šฅ์€ ๊ฐ€์ •ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ดˆ๋ณด์ž ๋ฐ / ๋˜๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์ˆ™๋ จ๋˜์ง€ ์•Š์€ ์›์‚ฌ ์†Œ๋น„์ž์— ์˜ํ•ด ์˜ค์šฉ๋˜์–ด ํฌ์ธํŠธ 2๋ฅผ ๊ณ„์† ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“ ์ด ๊ธฐ๋Šฅ์˜ ํ•„์š”์„ฑ์„ ์™„ํ™” ํ•  ์ˆ˜์žˆ๋Š” ๋” ์ข‹๊ณ  ๊ตฌ์กฐ์ ์œผ๋กœ ๋” ๊ฑด์ „ํ•œ ๋ฐฉ๋ฒ•์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด yarn-add-no-save ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ๋กœ์ปฌ ๋˜๋Š” ์ „์—ญ์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ yarn add yarn-add-no-save --dev
# or
$ yarn global add yarn-add-no-save

์ผ๋‹จ ์„ค์น˜๋˜๋ฉด ๊ฐ„๋‹จํžˆ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ yarn add-no-save <packages> # (yarn-add-no-save when installed globally)

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

$yarn add-no-save --help

์ฐธ๊ณ  : ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชฉ์ ์— ๋งž์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ์ œ๊ฐ€ ์ƒ๊ฐ ํ•ด๋‚ผ ์ˆ˜์žˆ๋Š” ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ด๋ฉฐ ๋‚ด ์š”๊ตฌ์— ๋งž์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํŠนํžˆ peerDeps ์ง€์›์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ์ฃผ์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ์„ ํ•„์š”๋กœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค ๋งŒ์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋Š” ๋ช…ํ™•ํ•œ ๊นƒ๋ฐœ ๋’ค์— ๊ทธ๊ฒƒ์„ ์š”๊ตฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ CI ์ค‘์— ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

yarn install xxx ๋‹ค์Œ yarn remove xxx ํ•ฉ๋‹ˆ๋‹ค.

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

yarn install xxx ๋‹ค์Œ yarn remove xxx ํ•ฉ๋‹ˆ๋‹ค.

๋˜‘๊ฐ™๋‹ค

๋‹ค์Œ์€์ด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋„๊ตฌ ๋‚ด์—์„œ "์–ดํ”Œ๋ผ์ด์–ธ์Šค"๋ฅผ์œ„ํ•œ ๋ชจ๋“ˆ ์‹ ์—์ฝ” ์‹œ์Šคํ…œ์ด์žˆ๋Š” ๋„๊ตฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ณ„ํš์€ ํ•ด๋‹น ์–ดํ”Œ๋ผ์ด์–ธ์Šค๋กœ ๋กœ์ปฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ตฌ์„ฑ์„ ํ†ตํ•ด ๋™์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ดํ”Œ๋ผ์ด์–ธ์Šค๋Š” npm์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค (์›ํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋ ˆ์ž„ ์›Œํฌ ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Œ).

๋ฐ”๋‹๋ผ ํ”„๋กœ์ ํŠธ๋Š” ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€์— ์˜์กด ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ package.json ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ธ์Šคํ„ด์Šค์˜ ๊ตฌ์„ฑ์€ ํŒจํ‚ค์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋กœ์ปฌ์— ์„ค์น˜ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด์—†๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์— ์ œํ•œ์ ์ธ ๊ฒฐ์ • ์ธ

์—ฌ๊ธฐ์„œ "๊ด€๋ฆฌ์ž"๋‹ต๊ธ€์„ ์ฝ๊ธฐ ์ „์—๋Š” ๋‚ด๊ฐ€ ๊ฐ€์žฅ ๊ณ ์ง‘์ด ์„ผ ์‚ฌ๋žŒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฑฐ์˜ 4 ๋…„ ... ๐Ÿคฆ

"๊ณ ์ง‘"์€ "๋””์ž์ธ ๋น„์ „์ด ์žˆ๊ณ  ๋ˆ„๊ตฌ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ"๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

"๊ณ ์ง‘"์€ "๋””์ž์ธ ๋น„์ „์ด ์žˆ๊ณ  ๋ˆ„๊ตฌ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ"๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋””์ž์ธ ๋น„์ „์€ ํ–‰๋ณตํ•œ ๊ธธ์„ ์„ค๋ช…ํ•˜๊ณ  ์—ฌ๊ธฐ์—์„œ ์š”์ฒญํ•œ ํƒˆ์ถœ ํ•ด์น˜๋กœ ๋” ๋„“์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์œ ์šฉ์„ฑ์„ ๋”ํ•ฉ๋‹ˆ๋‹ค.

"์ž์œ  ํ˜•์‹"์„ค์น˜ ๋ฐ ํ˜„์ƒ ์œ ์ง€์˜ ์ฆ๋ถ„ ์Šค๋ƒ… ์ƒท ( node_modules )์„ ์ถ”์ ํ•˜๋Š” ์ž ๊ธˆ ํŒŒ์ผ์— ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ๋˜๋Œ๋ฆด ์ˆ˜์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋˜๋Š” node_modules์™€ ๋ณ„๋„์˜ ํด๋”์— ์ข…์†์„ฑ์„ ๋„ฃ๊ณ  node_modules๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€์— ๋งํฌ๊ฐ€ ๋…ธ์ถœ๋˜๋„๋ก ์œ ์ง€ํ•˜๋ฉด Yarn์€ ์‹ค์ œ๋กœ ์ž์ฒด์ ์œผ๋กœ ํ•ญ๋ชฉ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๋ณด์ด์ง€ ์•Š๋Š” ์„ค์น˜๊ฐ€ ํ•ญ๋ชฉ์„ ๋ฎ์–ด ์“ฐ๊ฑฐ๋‚˜ ๊นจ๋œจ๋ฆด ์—ผ๋ ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Git์€ ์ˆ˜์‹ญ ๋…„ ์ „์—์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ ์žก์œผ์„ธ์š”! ๋ญ”๊ฐ€ ์ƒ๊ฐํ•ด ๋‚ด์„ธ์š”! ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๋””์ž์ธ์ž…๋‹ˆ๋‹ค-ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๋Š” ๊ฒƒ (๋˜๋Š” ๊ทธ๊ฒƒ์— ๊ตด๋ณตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค).

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

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ƒฅ ๋Œ์•„ ๋‹ค๋‹ ์ˆ˜์žˆ์„ ๋•Œ ๋ชจ๋‘๊ฐ€ ์ข์€ ์–ธ๋•์„ ์„œ๋กœ ๋ฐ€์–ด ๋ถ™์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง„๋‹ค.

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