Node Package Manager
๋ ธ๋์ ํจํค์ง ๋งค๋์
๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ง๋ ์์ค ์ฝ๋๋ค์ ๋ชจ์๋ ์ ์ฅ์
๋จ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ
์ด๋ฏธ ์๋ ๊ธฐ๋ฅ์ ๋ค์ ๊ตฌํํ ํ์๊ฐ ์์ด ํจ์จ์
์คํ ์์ค ์ํ๊ณ๋ฅผ ๊ตฌ์ฑ์ค
ํจํค์ง: npm์ ์ ๋ก๋๋ ๋ ธ๋ ๋ชจ๋
๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋ฏ ํจํค์ง๋ ๋ค๋ฅธ ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์์
์์กด ๊ด๊ณ๋ผ๊ณ ๋ถ๋ฆ
ํ์ฌ ํ๋ก์ ํธ์ ๋ํ ์ ๋ณด์ ์ฌ์ฉ ์ค์ธ ํจํค์ง์ ๋ํ ์ ๋ณด๋ฅผ ๋ด์ ํ์ผ
package name: ํจํค์ง์ ์ด๋ฆ์ ๋๋ค. package.json์ name ์์ฑ์ ์ ์ฅ๋ฉ๋๋ค.
version: ํจํค์ง์ ๋ฒ์ ์ ๋๋ค. npm์ ๋ฒ์ ์ ๋ค์ ์๊ฒฉํ๊ฒ ๊ด๋ฆฌ๋ฉ๋๋ค. 5.3์ ์์ ๋ค๋ฃน๋๋ค.
entry point: ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ํ์ผ ์ง์ ์ ์ ๋๋ค. ๋ณดํต ๋ง์ง๋ง์ผ๋ก module.exports๋ฅผ ํ๋ ํ์ผ์ ์ง์ ํฉ๋๋ค. package.json์ main ์์ฑ์ ์ ์ฅ๋ฉ๋๋ค.
test command: ์ฝ๋๋ฅผ ํ ์คํธํ ๋ ์ ๋ ฅํ ๋ช ๋ น์ด๋ฅผ ์๋ฏธํฉ๋๋ค. package.json scripts ์์ฑ ์์ test ์์ฑ์ ์ ์ฅ๋ฉ๋๋ค.
git repository: ์ฝ๋๋ฅผ ์ ์ฅํด๋ Git ์ ์ฅ์ ์ฃผ์๋ฅผ ์๋ฏธํฉ๋๋ค. ๋์ค์ ์์ค์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ์ฌ์ฉ์๋ค์ด ์ด ์ ์ฅ์์ ๋ฐฉ๋ฌธํด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ ์๋ ์๊ณ , ์ฝ๋ ์์ ๋ณธ์ ์ฌ๋ฆด ์๋ ์์ต๋๋ค. package.json์ repository ์์ฑ์ ์ ์ฅ๋ฉ๋๋ค.
keywords: ํค์๋๋ npm ๊ณต์ ํํ์ด์ง(https://npmjs.com)์์ ํจํค์ง๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๊ฒ ํด์ค๋๋ค. package.json์ keywords ์์ฑ์ ์ ์ฅ๋ฉ๋๋ค.
license: ํด๋น ํจํค์ง์ ๋ผ์ด์ ์ค๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
npm init์ด ์๋ฃ๋๋ฉด ํด๋์ package.json์ด ์์ฑ๋จ
package.json
{
"name": "npmtest",
"version": "1.0.0",
"description": "์ ๋ฅผ ์ฝ์ด์ฃผ์ธ์.",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index"
// start๋ ์ด๋ฏธ ๋ง์ด ์ฌ์ฉ ์ค์ด๋ผ์ npm start๋ผ๊ณ ํด๋๋จ.
},
"author": "seokahi",
"license": "MIT"
}
npm run [์คํฌ๋ฆฝํธ๋ช
]์ผ๋ก ์คํฌ๋ฆฝํธ ์คํ
๐ "test": "echo \"Error: no test specified\" && exit 1" ์คํ
express ์ค์นํ๊ธฐ
package.json์ ๊ธฐ๋ก๋จ(dependencies์ express ์ด๋ฆ๊ณผ ๋ฒ์ ์ถ๊ฐ๋จ)
dependencies: ๋ฐฐํฌํ ๋๊น์ง ์ฌ์ฉ
devDependencies: ๊ฐ๋ฐํ ๋๋ง ์ฌ์ฉ
npm install ์ node_modules ํด๋ ์์ฑ
npm install ํจํค์ง1 ํจํค์ง2 ํจํค์ง3 โฆ
npm install --save-dev ํจํค์ง๋ช ๋๋ npm i -D ํจํค์ง๋ช
npm install --global ํจํค์ง๋ช ๋๋ npm i -g ํจํค์ง๋ช
๋ ธ๋ ํจํค์ง์ ๋ฒ์ ์ SemVer(์ ์์ ๋ฒ์ ๋) ๋ฐฉ์์ ๋ฐ๋ฆ
Major(์ฃผ ๋ฒ์ ), Minor(๋ถ ๋ฒ์ ), Patch(์ ๋ฒ์ )
๋ ธ๋์์๋ ๋ฐฐํฌ๋ฅผ ํ ๋ ํญ์ ๋ฒ์ ์ ์ฌ๋ ค์ผ ํจ
Major๋ ํ์ ๋ฒ์ ๊ณผ ํธํ๋์ง ์์ ์์ ์ฌํญ์ด ์๊ฒผ์ ๋ ์ฌ๋ฆผ
Minor๋ ํ์ ๋ฒ์ ๊ณผ ํธํ๋๋ ์์ ์ฌํญ์ด ์๊ฒผ์ ๋ ์ฌ๋ฆผ
Patch๋ ๊ธฐ๋ฅ์ ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ์ ๋ ์ฌ๋ฆผ
๋ฒ์ ์์ ๊ธฐํธ๋ฅผ ๋ถ์ฌ ์๋ฏธ๋ฅผ ๋ํจ
^1.1.1: ํจํค์ง ์ ๋ฐ์ดํธ ์ minor ๋ฒ์ ๊น์ง๋ง ์ ๋ฐ์ดํธ ๋จ(2.0.0๋ฒ์ ์ ์ ๋จ)
~1.1.1: ํจํค์ง ์ ๋ฐ์ดํธ ์ patch๋ฒ์ ๊น์ง๋ง ์ ๋ฐ์ดํธ ๋จ(1.2.0๋ฒ์ ์ ์ ๋จ)
=, <=, >, <๋ ์ด์, ์ดํ, ์ด๊ณผ, ๋ฏธ๋ง.
@latest๋ ์ต์ ๋ฒ์ ์ ์ค์นํ๋ผ๋ ์๋ฏธ
์คํ์ ์ธ ๋ฒ์ ์ด ์กด์ฌํ๋ค๋ฉด @next๋ก ์คํ์ ์ธ ๋ฒ์ ์ค์น ๊ฐ๋ฅ(๋ถ์์ ํจ)
๊ฐ ๋ฒ์ ๋ง๋ค ๋ถ๊ฐ์ ์ผ๋ก ์ํ/๋ฒ ํ/RC ๋ฒ์ ์ด ์กด์ฌํ ์๋ ์์(1.1.1-alpha.0, 2.0.0-beta.1, 2.0.0-rc.0)
npm outdated: ์ด๋ค ํจํค์ง์ ๊ธฐ๋ฅ ๋ณํ๊ฐ ์๊ฒผ๋์ง ์ ์ ์์
npm update: package.json์ ๋ฐ๋ผ ํจํค์ง ์ ๋ฐ์ดํธ
npm uninstall ํจํค์ง๋ช : ํจํค์ง ์ญ์ (npm rm ํจํค์ง๋ช ์ผ๋ก๋ ๊ฐ๋ฅ)
npm search ๊ฒ์์ด: npm ํจํค์ง๋ฅผ ๊ฒ์ํ ์ ์์(npmjs.com์์๋ ๊ฐ๋ฅ)
npm info ํจํค์ง๋ช : ํจํค์ง์ ์ธ๋ถ ์ ๋ณด ํ์ ๊ฐ๋ฅ
npm login: npm์ ๋ก๊ทธ์ธ์ ํ๊ธฐ ์ํ ๋ช ๋ น์ด(npmjs.com์์ ํ์๊ฐ์ ํ์)
npm whoami: ํ์ฌ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ์๋ ค์ค
npm logout: ๋ก๊ทธ์ธํ ๊ณ์ ์ ๋ก๊ทธ์์
npm version ๋ฒ์ : package.json์ ๋ฒ์ ์ ์ฌ๋ฆผ(Git์ ์ปค๋ฐ๋ ํจ)
npm deprecate [ํจํค์ง๋ช ][๋ฒ์ ] [๋ฉ์์ง]: ํจํค์ง๋ฅผ ์ค์นํ ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋์ฐ๊ฒ ํจ(์ค๋ฅ๊ฐ ์๋ ํจํค์ง์ ์ ์ฉ)
npm publish: ์์ ์ด ๋ง๋ ํจํค์ง๋ฅผ ๋ฐฐํฌ
npm unpublish --force: ์์ ์ด ๋ง๋ ํจํค์ง๋ฅผ ๋ฐฐํฌ ์ค๋จ(๋ฐฐํฌ ํ 72์๊ฐ ๋ด์๋ง ๊ฐ๋ฅ)
๋ค๋ฅธ ์ฌ๋์ด ๋ด ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ ๋ฐฐํฌ๊ฐ ์ค๋จ๋๋ฉด ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ
๊ธฐํ ๋ช ๋ น์ด๋ https://docs.npmjs.com์ CLI Commands์์ ํ์ธ
npmjs.com์ ์ ์ํด์ ํ์๊ฐ์
package.json๊ณผ main ๋ถ๋ถ๊ณผ ๋ฐฐํฌํ ํ์ผ ๊ฒฝ๋ก๋ช
์ด ์ผ์นํด์ผ ํจ
โmainโ: โindex.jsโ
index.js
module.exports = () => {
return 'hello package';
};
npm publish ์ ๋ ฅ
npmtest๋ ์ด๋ฆ์ ๋๊ฐ ์ฌ์ฉ์ค
์ด๋ฆ์ ๋ณ๊ฒฝํ ํ npm publish ์ ๋ ฅ
72์๊ฐ ๋ด์ npm unpublish ํจํค์ง๋ช --force์ ๋ ฅ
๐์ถ์ฒ๐
Node.js ๊ต๊ณผ์ - ๊ธฐ๋ณธ๋ถํฐ ํ๋ก์ ํธ ์ค์ต๊น์ง
https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard