๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Web/JS & TS

package.json scripts์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ, NPM LifeCycle Hook

by LasBe 2024. 12. 30.
๋ฐ˜์‘ํ˜•

๐Ÿ“’ package.json scripts์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ, NPM LifeCycle Hook


์ด๋ฒˆ์— ์ด์ง์„ ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ด๋ฆฌ์ €๋ฆฌ ํŒŒ์•…ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋“œ๋ถ„๊ณผ Q&A๋ฅผ ํ•˜๋˜ ์ค‘ package.json scripts์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์Šค์น˜๋“ฏ ๋“ค์—ˆ๊ณ , ๊ถ๊ธˆํ•ด์„œ ์ž์„ธํžˆ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ package.json์˜ scripts

"scripts": {
  "dev": "next dev",
  "build": "next build",
  "start": "next start",
  "lint": "next lint"
},

์œ„๋Š” next.js์—์„œ ํ”ํžˆ ๋ณด๋˜ ์Šคํฌ๋ฆฝํŠธ ํ•„๋“œ์ž…๋‹ˆ๋‹ค.

ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์— ๋”ฐ๋ผ npm run devyarn devpnpm dev์™€ ๊ฐ™์ด ํ„ฐ๋ฏธ๋„์— ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง„ npm์ด ์ œ๊ณตํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋ฐฉ์‹์œผ๋กœ, ํŠน์ • ์ด๋ฆ„์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•˜๋ฉด npm์ด ์ด๋ฅผ ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋‹น์—ฐํ•˜๋‹ค๋Š” ๋“ฏ ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฌํ•œ ์Šคํฌ๋ฆฝํŠธ ์•ž๋’ค์— ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ƒ๋ช…์ฃผ๊ธฐ ํ›…์„ ์ถ”๊ฐ€ํ•˜์—ฌ && ์—ฐ์‚ฐ์ž๋กœ ๋ช…๋ น์–ด๋ฅผ ๊ธธ๊ฒŒ ๋Š˜์–ด๋œจ๋ฆฌ์ง€ ์•Š์•„๋„ ์ž๋™ํ™”๋ฅผ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ pre์™€ post ํ›…

package.json scripts์— ํŠน์ • anyscript๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด pre์™€ post ํ‚ค์›Œ๋“œ๋ฅผ prefix๋กœ ๋ถ™์—ฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ „, ์‹คํ–‰ ํ›„์— ์ž๋™์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"scripts": {
  "preanyscript": "echo '*** RUN PRE ***'",
  "anyscript": "echo '*** RUN ANYSCRIPT ***'",
  "postanyscript": "echo '*** RUN POST ***'"
},

 

์ด์ฒ˜๋Ÿผ ์ปค์Šคํ…€ ์Šคํฌ๋ฆฝํŠธ ์ „, ํ›„๋กœ ๋ช…๋ น์–ด๋ฅผ ์ž๋™ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŠน์ • ์ƒํ™ฉ์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน๋ณ„ํ•œ ์ƒ๋ช…์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ ๋˜ํ•œ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ ํŠน์ˆ˜ํ•œ ์ƒ๋ช…์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ

ํŠน์ • ์ƒํ™ฉ์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋Š” npm ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ ์†Œ๊ฐœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์‹คํ–‰๋ฐฉ๋ฒ•๊ณผ ์ƒ๋ช…์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์Œ npm ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

https://docs.npmjs.com/cli/v8/using-npm/scripts#npm-start

๐Ÿ”Ž install

  1. preinstall: ํŒจํ‚ค์ง€ ์„ค์น˜ ์ „์— ์‹คํ–‰
  2. install: ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋  ๋•Œ ์‹คํ–‰
  3. postinstall: ํ•ด๋‹น ํŒจํ‚ค์ง€๊ฐ€ ๋กœ์ปฌ์— ์„ค์น˜๋œ ํ›„ ์‹คํ–‰
  4. prepublishOnly: npm install ์ค‘ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋  ๋•Œ ์‹คํ–‰ (๋ฐฐํฌ์™€ ๊ด€๋ จ ์—†์Œ)

๐Ÿ”Ž publish

  1. prepare: ๋ฐฐํฌ ์ „์— ์‹คํ–‰ (Git ์ €์žฅ์†Œ์— ์„ค์น˜ํ•  ๋•Œ๋„ ์‹คํ–‰)
  2. prepublishOnly: ํŒจํ‚ค์ง€ ๋ฐฐํฌ ์ „์— ์‹คํ–‰ (prepare ๋‹ค์Œ)
  3. publish: ํŒจํ‚ค์ง€ ๋ฐฐํฌ ์‹œ ์‹คํ–‰
  4. postpublish: ํŒจํ‚ค์ง€ ๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰

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

 

๐Ÿ“Œ ์ฃผ์˜ํ•  ์ 

์ด๋ ‡๊ฒŒ ํŽธ๋ฆฌํ•œ ์ƒ๋ช…์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์˜ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

yarn ํ˜น์€ pnpm์—์„œ ํŠน์ • ์ƒ๋ช…์ฃผ๊ธฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์›ํ•  ์ˆ˜๋„, ์ง€์›ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๊ธฐ์— ์ž˜ ์ฐพ์•„๋ณด๊ณ  ์‚ฌ์šฉํ•˜์…”์•ผ ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€


์˜คํ”ˆ ์ฑ„ํŒ