npm์ด๋?
npm์ node package manager์ ์ฝ์๋ก, Node.js์ ๊ธฐ๋ณธ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๋ค. ์ฆ, ์ ์ธ๊ณ์ ๊ฐ๋ฐ์๋ค์ด ๋ง๋ ๋ค์ํ ํจํค์ง(๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ชจ๋ ๋ฑ)์ ์ค์น, ์ ๋ฐ์ดํธ, ์ญ์ , ๊ด๋ฆฌํ ์ ์๋ค. Node.js๋ฅผ ์ค์นํ๋ฉด npm๋ ํจ๊ป ์ค์น๊ฐ ๋๋ฉฐ, Node.js ํ๊ฒฝ์์ ๋ฐ๋ก npm ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
npm์ ๋์ฒดํ๊ธฐ ์ํ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๋ก๋ yarn, pnpm ๋ฑ์ด ์๋ค.
ํจํค์ง, ๋ชจ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ
npm์ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ์ธ๋ฐ, ๊ทธ๋ ๋ค๋ฉด ์ด 'ํจํค์ง'๋ ๋ฌด์์ ์๋ฏธํ๋ ๊ฒ์ผ๊น? JavaScript์์์ ํจํค์ง๋ ์ฝ๋์ ํจ๊ป ํด๋น ์ฝ๋์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ ํ๋์ ๋ฐฐํฌ ๋จ์์ด๋ค. ์ฆ, ํน์ ๊ธฐ๋ฅ์ ์ํํ๊ณ ์๋ ์ฝ๋์ ๋ชจ์์ผ๋ก, ๋ณดํต package.json ํ์ผ์ ํฌํจํ๊ณ ์์ด์ผ ํจํค์ง๋ก ์ธ์ํ๋ค. ์๋ฅผ ๋ค์ด, ์ซ์๋ ๋ ์ง๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ค์ ํจํค์ง๋ก ๋ง๋ค์ด ๋์ผ๋ฉด, ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ ์ด ํจํค์ง๋ฅผ ์ค์นํด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ๋ง๋๋ก ํจํค์ง๋ ์ฃผ๋ก JavaScript์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ด๋ ๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ ๊ฒ์ด๋ค. ํจํค์ง ์์๋ ๋ค์ํ ํํ์ ์ฝ๋๊ฐ ํฌํจ๋ ์ ์์ผ๋ฉฐ, ๊ทธ ์ค ๋ํ์ ์ธ ๊ฐ๋ ์ด ๋ชจ๋๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
๋ชจ๋์ ํ๋์ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๋ ์์ ๋จ์, ์ฝ๋ ๋ฉ์ด๋ฆฌ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋์ ๋ชจ๋์ ํ๋์ ํน์ ์์ ์ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์๋ฅผ ๋ค์ด, ์ซ์๋ฅผ ๋ํ๋ ๊ธฐ๋ฅ๋ง ํ๋ ์ฝ๋, ๋ ์ง๋ฅผ ์ด๊ธฐํํ๋ ๊ธฐ๋ฅ๋ง ํ๋ ์ฝ๋๊ฐ ํ๋์ ๋ชจ๋์ด๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณดํต ์ด๋ฌํ ๋ชจ๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฌถ์ด์ ์ ๊ณตํ๋ ์ฝ๋์ ์งํฉ์ด๋ค. ์๋ฅผ ๋ค์ด, ๋ ์ง์ ์๊ฐ ๊ด๋ จ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๋ค๋ฃจ๋ ์ฝ๋๋ค์ด ๋ชจ์ฌ ํ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ ์ ์๋ค.
package.json
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๋ณด๋ฉด, ์๋ง์ ํจํค์ง๋ค์ ์ถ๊ฐํ๊ฒ ๋๋ค. ์ด๋ฌํ ํจํค์ง๋ค์ ์ ๋ง๋ค์ ๊ณ ์ ํ ๋ฒ์ ์ด ์๊ณ , ์ด๊ฒ์ ๊ธฐ๋กํ๊ณ ๊ด๋ฆฌํด์ฃผ๋ ํ์ผ์ด ๋ฐ๋ก package.json์ด๋ค.
npm์ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด, ํ๋ก์ ํธ ๋ด์ package.json ํ์ผ์ด ์กด์ฌํด์ผ ํ๋ค. package.json ํ์ผ์ ์์ฑํ๋ ค๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ฅผ ํฐ๋ฏธ๋์ ์ ๋ ฅํ๊ณ , ํจํค์ง ์ด๋ฆ ๋ฑ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
npm init
์ด ๋ช ๋ น์ด๋ ํ๋ก์ ํธ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๊ณ , package.json ํ์ผ์ ์์ฑํ๋ ๊ณผ์ ์ผ๋ก, ์ดํ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์๋์ ๊ฐ์ด npm init
๋ช
๋ น์ด์ -y
ํ๋๊ทธ๋ฅผ ๋ถ์ด๋ฉด, ํ๋ก์ ํธ ์์ฑ ์ ์ผ์ผ์ด ์ ๋ณด๋ฅผ ๋ฃ์ง ์์๋ package.json์ ๊ธฐ๋ณธ ๋ด์ฉ์ผ๋ก ์์ฑํ ์ ์๋ค.
npm init -y
์๋์ ๊ฐ์ด ์์ฑ๋ package.json์ ๋ด์ฉ์ ์ดํด๋ณผ ์ ์๋ค.
name
: ํ๋ก์ ํธ ์ด๋ฆversion
: ํ๋ก์ ํธ ๋ฒ์ - ์ผ๋ฐ์ ์ผ๋ก semver(์ ์์ ๋ฒ์ ๊ด๋ฆฌ)๋ฅผ ๋ฐ๋ฆ.
main
: ํจํค์ง๊ฐ ๋ชจ๋๋ก ์ฌ์ฉ๋ ๋ ๊ธฐ๋ณธ์ผ๋ก ๋ก๋๋ ํ์ผ์ ์ง์ ํ๋ค.- ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์ด ํจํค์ง๋ฅผ requireํ ๋ ์ด๋ค ํ์ผ์ด ๋ถ๋ฌ์์ ธ์ผ ํ๋์ง ์ ์ํ๋ค.
scripts
: ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ์- ํฐ๋ฏธ๋์์ npm run <script-name>์ผ๋ก ์คํ ๊ฐ๋ฅ
keywords
: ํ๋ก์ ํธ๋ฅผ ์ค๋ช ํ๋ ํค์๋- ํจํค์ง ๋ ์ง์คํธ๋ฆฌ์์ ๊ฒ์์ ์ฉ์ดํ๊ฒ ํจ
author
: ํ๋ก์ ํธ์ ์ ์ ์ ๋ณด.- ๋ณดํต ์ด๋ฆ๊ณผ ์ด๋ฉ์ผ ํฌํจ
license
: ํ๋ก์ ํธ์ ๋ผ์ด์ ์ค ์ ์- ํ๋ก์ ํธ๊ฐ ์ด๋ค ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฅด๋์ง ๋ช ์ (ex. MIT, GPL-3.0)
description
: ํ๋ก์ ํธ์ ๋ํ ๊ฐ๋จํ ์ค๋ช- ์ฃผ๋ก ํจํค์ง๋ฅผ ๋ฐฐํฌํ ๋ ์ฌ์ฉ๋๊ณ , npm ๋ ์ง์คํธ๋ฆฌ์์ ํจํค์ง ์ค๋ช ๋์ ํ์๋จ
ํจํค์ง ์ค์น
์๋์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๋ค.
npm install <package-name>
์ผ๋ฐ์ ์ผ๋ก ์์ ๊ฐ์ด ํจํค์ง๋ฅผ ์ค์นํด์ฃผ๋ฉด, ๊ฐ๋ฐํ ๋์ ํ๋ก์ ํธ ์คํํ ๋ ๋ชจ๋ ํ์ํ ํจํค์ง์ธ ์ผ๋ฐ ์์กด์ฑ ํจํค๋ฅผ ์ค์นํ๋ ๊ฒ์ด ๋๋ค. npm install
๋ช
๋ น์ด์ --save-dev
(์ฝ์ด: -D
)๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด, ๊ฐ๋ฐ๊ณผ์ ์์๋ง ํ์ํ ํจํค์ง์ธ ๊ฐ๋ฐ์ฉ ์์กด์ฑ ํจํค์ง(๋น๋ ๋๊ตฌ, ํ
์คํธ ๋๊ตฌ ๋ฑ)๋ฅผ ์ค์นํ๊ฒ ๋ค๋ ์๋ฏธ๊ฐ ๋๋ค.
npm install <package-name> --save-dev
npm install --save-dev <package-name>
npm install <package-name> -D
npm install -D <package-name>
package.json์ dependencies, devDependencies
ํจํค์ง๋ฅผ ์ค์นํ๊ณ ๋๋ฉด ์์ ๊ฐ์ด package.json ํ์ผ์ dependecies์ devDependencies๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฌ๊ธฐ์ ํ์ฌ ํ๋ก์ ํธ์ ์ค์น๋ ํจํค์ง์ ์ด๋ฆ๊ณผ ๋ฒ์ ์ด ๊ธฐ๋ก๋๋ค.
- dependencies : ์ผ๋ฐ ์์กด์ฑ ํจํค์ง ๋ชฉ๋ก
- devDependecies: ๊ฐ๋ฐ์ฉ ์์กด์ฑ ํจํค์ง ๋ชฉ๋ก
package-lock.json
npm install
ํ์ ์๋์ผ๋ก package-lock.json ํ์ผ์ด ์์ฑ๋๋ค. ์ ์ฌ์ง์์ ํ์ธํ ์ ์๋ค์ํผ, package.json๋ณด๋ค ๋ด์ฉ์ ์์ด ํจ์ฌ ๋ง๋ค. ๊ทธ ์ด์ ๋ package-lock.json ํ์ผ์ ํ๋ก์ ํธ์์ ์ค์น๋ ์ ํํ ํจํค์ง ๋ฒ์ ๊ณผ ์ค์น๋ ํจํค์ง๋ค์ ๋ชจ๋ ์์กด ๊ด๊ณ๋ฅผ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ์ด๋ค.
package.json์ ์ฃผ๋ก ํ๋ก์ ํธ์์ ์ง์ ์ฌ์ฉํ๋ ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ , package-lock.json์ ๊ทธ ์์กด์ฑ๋ค์ด ์ด๋ค ๋ค๋ฅธ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋์ง๊น์ง ๊ด๋ฆฌํ๋ค. ๋ํ, package.json์ dependencies์๋ ^1.0.0
๊ณผ ๊ฐ์ ๋ฒ์ ๋ฒ์๋ฅผ ์ค์ ํ ์ ์์ง๋ง, package-lock.json์์๋ 1.0.1
๊ณผ ๊ฐ์ด ๊ตฌ์ฒด์ ์ธ ๋ฒ์ ์ด ๊ธฐ๋ก๋๋ค.
์์ ๊ฐ์ด package-lock.json์ ํตํด ์ฌ๋ฌ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ํ๋ก์ ํธ์์ ์์ ํ ๋, ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ํจํค์ง ๋ฒ์ ์ ์ค์นํ๊ฒ ๋์ด ๋ฒ์ ์ฐจ์ด๋ก ์ธํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
node_modules
ํจํค์ง ์ค์น ํ ์์ฑ๋๋ ํด๋๋ก, ํจํค์ง๋ฅผ ์ค์นํ๋ฉด ์ค์ ๋ก ๊ทธ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ๊ณณ์ด๋ค. ์ด ํด๋์๋ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ธ๋ถ ํจํค์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ค์น๋๋ ๋๋ ํ ๋ฆฌ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก node_modules๋ ์์ฃผ ํฌ๊ณ ๋ฌด๊ฒ๊ธฐ ๋๋ฌธ์ git๊ณผ ๊ฐ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์๋ ํฌํจํ์ง ์๋๋ค. .gitignore
ํ์ผ์ node_modules๋ฅผ ์ถ๊ฐํ์ฌ ์ปค๋ฐ๋์ง ์๋๋ก ํ๋ค.
node_modules๋ ์ญ์ ๊ฐ ๋์ด๋, ๋ค์ npm install
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด package.json์ ๊ธฐ๋ก๋ ์์กด์ฑ๋ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด ๋ค์ ์์ฑํ ์ ์๋ค. package-lock.json์ ์ ์งํ๋ ๊ฒ์ด ๊ถ์ฅ๋์ง๋ง, ์ค์๋ก ์ญ์ ํ๋๋ผ๋ ์ญ์ package.json์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด package-lock.json ํ์ผ ์์ฑํ ์ ์๋ค. package.json ํ์ผ์ ์์กด์ฑ ์ ๋ณด์ ๊ฐ์ข
์ค์ ์ ๊ธฐ๋กํ๋ ํต์ฌ ํ์ผ์ด๋ฏ๋ก ์ ๋ ์ญ์ ํด์๋ ์๋๋ค.