Node.js ํ๋ก์ ํธ๋ฅผ ์์ํ ๋, ํฐ๋ฏธ๋์ 'npm install'์ ์ ๋ ฅํ๋ฉด ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์ฌ๋ฌ ํ์ผ๋ค์ด ๊ธฐ๋ณธ์ผ๋ก ์ค์น๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ package.json์ ๋ฌด์์ด๊ณ , ๊ฑฐ๊ธฐ๋ค package-lock.json์ ๋ฌด์์ผ๊น?
ํ๋ก์ ํธ ์์์ ์์ ์ผ๋จ ๊ตฌ์กฐ๋ถํฐ ์๊ณ ์์ํด ๋ณด์.
1. package.json
# package.json ์์
{
"name": "codingElla",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
... # ์๋ต
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
package.json ํ์ผ์ Node.js ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋ ํ์ผ๋ก, ์ผ๋ฐ์ ์ผ๋ก ์ด ์์๋ ํ๋ก์ ํธ์ ์ด๋ฆ, ๋ฒ์ , ์ค๋ช , ์์ฑ์, ๋ผ์ด์ผ์ค, ํ๋ก์ ํธ ์คํ์ ํ์ํ ์๋ํํฐ ํจํค์ง์ธ *์์กด์ฑ ๋ชฉ๋ก์ด ํฌํจ๋๋ค. (์ฐธ๊ณ ๋ก *์์กด์ฑ์ด๋, ๋ชจ๋๊ณผ ๋ชจ๋๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ์ง๋ณด์๋ ํ์ฅ์ฑ์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋งค์ฐ ์ค์ํ๋ค.)
Node.js ํ๋ก์ ํธ์์ ํฐ๋ฏธ๋์ 'npm install'๋ผ๊ณ ์ ๋ ฅํ๋ฉด package.json ํ์ผ์ ๋์ด๋ ์์กด์ฑ์ด ์๋์ผ๋ก ์ค์น๋๋ฏ๋ก ํ๋ก์ ํธ์ ์์กด์ฑ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๊ณ , ํ์ํ ํจํค์ง์ ๋์ผํ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ๋ณด์ฅํ ์ ์๋ค. (์ด ๋ง์ ์ง๊ธ์ ์ดํด๊ฐ ์ด๋ ค์ธ ์ ์์ผ๋ฏ๋ก ์๋์์ ์์ธํ๊ฒ ์ค๋ช ํ๊ฒ ๋ค.)
2. package-lock.json
# package-lock.json ์์
{
"name": "codingElla",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "codingElla",
"version": "0.1.0",
"dependencies": {
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
}
},
"node_modules/@adobe/css-tools": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz",
"integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA=="
},
... # ์๋ต
}
}
package-lock.jsonํ์ผ์ ์์กด์ฑ ํธ๋ฆฌ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, package-lock.json ํ์ผ์ด ์์ฑ๋ ์์ ์ ์์กด์ฑ ํธ๋ฆฌ๊ฐ ๋ค์ ์์ฑ๋ ์ ์๋ค. (์ด ๋ง ๋ํ ์ง๊ธ์ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ์ ์์ผ๋ ์๋์ ์์ธํ ์ค๋ช ์ ํ๊ฒ ๋ค.)
3. package-lock.json๊ฐ ํ์ํ ์ด์
package.json ํ์ผ ์์์ ์์กด์ฑ ์ ์ธ์๋ 'version range'๊ฐ ์ฌ์ฉ๋๋ค. ์ด๋ ํน์ ๋ฒ์ ์ ์ง์นญํ๋ ๊ฒ์ด ์๋๋ผ, 'ํน์ ๋ฒ์ ์ด์'์ด๋ผ๋ range๋ฅผ ๋งํด์ค๋ค. (ex. ^18.2.0 === 18.2.0 ๋ฒ์ ์ด์)
์ด๋ package.json ํ์ผ๋ก npm install์ ์ ๋ ฅํ๋ฉด ํ์ฌ๋ 18.2.0 ๋ฒ์ ์ ๋ฆฌ์กํธ๊ฐ ์ค์น๋์ง๋ง, ์๋ก์ด ํจ์น๊ฐ ํผ๋ธ๋ฆฌ์๋๋ค๋ฉด ๋์ผํ package.json ํ์ผ๋ก npm install์ ์ ๋ ฅํด๋ ์ด์ ์ ์ค์นํ 18.2.0 ๋ฒ์ ์ด ์ค์น๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ ํฐ ๋ฌธ์ ๊ฐ ์์ผ๋, ์ด๋ ๊ฐํน ํ์ ํ๋ก์ ํธ ์ ์ค๋ฅ๋ฅผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
# ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์๋์ ์์กด์ฑ ํธ๋ฆฌ ์์๋ฅผ ์ฒจ๋ถํฉ๋๋ค.
# ์์กด์ฑ ํธ๋ฆฌ๋ 'npm ls'๋ก ์กฐํํ ์ ์์ต๋๋ค.
codingElla@0.1.0 /Users/yeonsuchoi/Workspace/React/blog-project
โโโ @testing-library/jest-dom@5.16.5
โโโ @testing-library/react@13.4.0
โโโ @testing-library/user-event@13.5.0
โโโ react-dom@18.2.0
โโโ react-scripts@5.0.1
โโโ react@18.2.0
โโโ web-vitals@2.1.4
์ด๋, package-lock.json ํ์ผ์ ์์ ๊ฐ์ ์์กด์ฑ ํธ๋ฆฌ์ ๋ํ ์ ๋ณด, ์ฆ ์ ํํ ๋ฒ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ package-lock.json ํ์ผ์ด ์์ฑ๋ ์์ ์ ์์กด์ฑ ํธ๋ฆฌ๊ฐ ๋ค์ ์์ฑ๋ ์ ์๋๋ก ๋ณด์ฅํ๋ค.
โ๏ธ ์๋ฅผ ๋ค์ด,
1. 4์ 1์ผ์ 18.2.0 ๋ฒ์ ์ ์ค์นํ๊ณ
2. 4์ 30์ผ์ npm install์ ํ์ฌ ์ ๋ฐ์ดํธ๋ 18.3.0 ๋ฒ์ ์ ์ค์นํ๊ณ ์ ํ๋๋ผ๋
3. package-lock.json ํ์ผ ๋๋ถ์ 18.2.0 ๋ฒ์ ์ผ๋ก ์์กด์ฑ ํธ๋ฆฌ๊ฐ ๋ค์ ์ ๋ฐ์ดํธ ๋๋ ๊ฒ์ด๋ค. (์ฌ์ค ์ด ๊ณผ์ ์ package.json์ ์กด์ฌ๋ง์ผ๋ก๋ ๊ฐ๋ฅํ๋, package-lock.json์ด ์ ํํ ๋ฒ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํนํ ํ์ ์ ํ์ํ ์กด์ฌ๋ผ๊ณ ๋ณผ ์ ์๋ค.)
โ๏ธ ๋๋ฌธ์,
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ ์ ์ํด์๋ package.json ํ์ผ๋ฟ๋ง ์๋๋ผ package-lock.json ๋ํ ํจ๊ป ์ปค๋ฐํด์ผ ํ๋ค.
โ๏ธ ๊ทธ๋ ์ง ์์ผ๋ฉด,
1. ๋ด๊ฐ 4์ 1์ผ์ ๋ด๊ฐ ์ปค๋ฐํ ์์ค์ฝ๋๋ฅผ
2. ๋๋ฃ ๊ฐ๋ฐ์๊ฐ 4์ 30์ผ์ pull ํ ํ npm install์ ์คํํ๋ฉด
3. ๋์ ์์กด์ฑ ํธ๋ฆฌ์ ๋๋ฃ์ ์์กด์ฑ ํธ๋ฆฌ๊ฐ ๋ค๋ฅด๊ฒ ์ค์น๋์ด ํ๋ก๊ทธ๋จ ์คํ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ ๊ฒ์ด๋ค.
โ๏ธ ์ ๋ฆฌํ์๋ฉด,
package-lock.json ํ์ผ ์์๋ ํ๋ก์ ํธ์ ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ํฌํจํ ๊ฐ ์์กด์ฑ์ ์ ํํ ๋ฒ์ , ๋ฒ์ ์ถฉ๋ ๋ฑ์ ์ ๋ณด๊ฐ ํฌํจ๋๊ธฐ ๋๋ฌธ์ ์ค์น ๋น์ ์์กด์ฑ์ ์ฌํํ๊ณ , ๋ค๋ฅธ ๊ฐ๋ฐ์์ ๊ณต์ ํ ๋ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ์ ์ฌ์ฉ๋๋ค.
๋ฐ๋ผ์ package-lock.json ํ์ผ์ Github ๋ฑ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ์ ์งํ๊ณ ์ญ์ ํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
4. ์ถ๊ฐ ๊ถ๊ธ์ฆ
๐ค package-lock.json ํ์ผ์ ์ญ์ ํ๋ฉด ์์กด์ฑ ํธ๋ฆฌ๋ ์ค์น๋ ์์กด์ฑ์ด ์ญ์ ๋ ๊น?
package-lock.json ํ์ผ์ ์ญ์ ํ๋ฉด ์์กด์ฑ ํธ๋ฆฌ๋ ์ค์น๋ ์์กด์ฑ์ด ์ญ์ ๋์ง๋ ์๋๋ค. ์์ ์ด์ผ๊ธฐํ ๊ฒ์ฒ๋ผ package-lock.json ํ์ผ์ ์ค์น๋ ํจํค์ง๊ฐ package.json ํ์ผ์์ ์ง์ ๋ ์ ํํ ๋ฒ์ ๊ณผ ์ผ์นํ๋๋ก ๋ณด์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. package-lock.json ํ์ผ์ด ์ญ์ ๋๋ฉด npm์ ์ฌ์ ํ package.json ํ์ผ์ ์ฌ์ฉํ์ฌ ํ์ํ ์์กด์ฑ์ ์ค์นํ์ง๋ง, ์ ํํ ๊ฐ์ ๋ฒ์ ์ ์ค์นํ๋ ๊ฒ์ ๋ณด์ฅํ์ง ์๋ ๊ฒ์ด๋ผ ๋ณด๋ฉด ๋๋ค.
๐ค ์ ์ด์ package.json ํ์ผ์ ์ ํํ ๋ฒ์ ๋ช ์ ์ ์ด๋๋ฉด ๋์ง ์์๊น?
package.json ํ์ผ์ ์ ํํ ํจํค์ง ๋ฒ์ ๋ช ์ ๋ช ์ํ๋ค๋ฉด, ํ๋ก์ ํธ์์ ์ฌ์ฉํ๊ณ ์๋ ํจํค์ง์ ์ค์ํ ๋ฒ๊ทธ ์์ ์ด ์ด๋ฃจ์ด์ง ๋๋ง๋ค ํ๋ก์ ํธ์ package.json ํ์ผ์ ์ ํ์๋ ๋ฒ์ ๋ ์์ ์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊ธธ ์ ์๋ค. ์ฆ, ํฌ๊ณ ์์ ํจํค์ง๋ค์ ๋ฆด๋ฆฌ์ฆ์ ๋ํด ํญ์ ์ถ์ ํ๊ณ ์์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ version range๋ก ๋ช ์ํจ์ผ๋ก์จ ์ด๋ฅผ ํด๊ฒฐํด ์ฃผ๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
5. References
- package-lock.json์ ์ ํ์ํ ๊น?
- Package.json๊ณผ Package-lock.json์ ์ฐจ์ด๋ฅผ ์์๋์?
- Caret vs Tilde in package.json
- npm ๊ณต์๋ฌธ์: package-lock.json
'๐ ์์ธ ์ง์ > ์์๋๋ฉด ์ข์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ ์์ ๋ถ๋ ๋จ์ด๊ฐ ๊ถ๊ธํด - '๋ชจ๋' ํธ (0) | 2023.09.15 |
---|---|
๋งํฌ๋ค์ด์ผ๋ก ํ ๊ธ ๊ธฐ๋ฅ์ ์ธ ์ ์์๊น? (0) | 2023.06.30 |
ํด๋ผ์ด์ธํธ ๋ฐฐํฌ๋ ์ ๊ธฐํ๊ณ ์ฌ๋ฐ์ด ๊ทธ๋ฆฌ๊ณ ๊ธด์ฅ๋ผ ... (0) | 2023.06.05 |
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ์ UI/UX๋ฅผ ์์์ผ ํฉ๋๊น? (11) | 2023.04.16 |
Library vs. Framework ์ฐจ์ด์ ์ ํ์คํ๊ฒ ์ ๋ฆฌํ๊ธฐ (0) | 2023.04.02 |
๋๊ธ