๐ NPM ํจํค์ง ๊ฒ์ ๋ฐ GIT ๋ฒ์ ๊ด๋ฆฌ ์๋ํ
7947 ๋จ์ด gitwebdevnpmproductivity
์๊ฐ
ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ๋๋ก ์๋๋๊ณ ์ผ์ข ์ ๋น๋ ํ๋ก์ธ์ค๊ฐ ์๋ ์ผ์ข ์ ์น ๊ตฌ์ฑ ์์, CSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ํจํค์ง(๋ณธ์ธ์ด ๋จ๋ ์์ฑ์์)์ ๋ํ ์๋๋ฆฌ์ค๋ฅผ ๊ฐ์ ํฉ๋๋ค.
์์์ ์ธ๊ธํ๋ฏ์ด ์ด ๊ธฐ์ฌ๋ ๋ธ๋์น์์ ํ๋ฐํ๊ฒ ์์ ํ๋ ๋ค์ค ๊ฐ๋ฐ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ํ ๊ฒ์ด ์๋๋๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๋ ํธ์ํ ๋ ์๋ฌด ๊ฒ๋ ํ๊ทธํ๊ณ ์ถ์ง ์๊ณ ํ์คํ ๊ฒ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฉ ํ์ดํ๋ผ์ธ(devops)์ ์ํด ์์ฝ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. .
์๋ฅผ ๋ค์ด ์ด ๊ธฐ์ฌ์์๋ JS ๋ฐ SCSS์ knobs์ ์ฌ์ฉํ๋ ๋งค์ฐ ์์ ํ๋ก์ ํธ์ธ Rollup ํจํค์ง ์ค ํ๋์ ์ฌ์ฉ๋ ์ฝ๋์ ์ผ๋ถ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ NPM ์คํฌ๋ฆฝํธ - ๊ธฐ์ด
์ด ํญ๋ชฉ์
start
, test
, version
, prepublishOnly
๋ฑ๊ณผ ๊ฐ์ NPM ์ฌ์ฉ์ ์ง์ ์คํฌ๋ฆฝํธ ๋ฐ ์๋ช
์ฃผ๊ธฐ ์์
์ ๋ํ ๊ธฐ๋ณธ ์ง์์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.๐ฅ ์๋ ๋ฆด๋ฆฌ์ค ํ๋ฆ ์์ด ์๋ชป๋ ์ ์๋ ๊ฒ:
ํ๋ก์ ํธ์๋ ๋น๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ๋ฏ๋ก ๋ฆด๋ฆฌ์ค ํ๋ฆ์ ์ต๋ํ ์๋ํํ์ง ์์ผ๋ฉด ์ํ์ง ์๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
version
์์ package.json
๊ณผ ๋ถ์ผ์น)publish
: should tag before committing or after?๐ฆบ ๊ตฌํจ: ์์ ๊ฐ์ ์ผ์ด ๋ฐ์ํ์ง ์๋๋ก ๋ณด์ฅํ๋ ๊ฒ.
๋ณ๊ฒฝ ์ ์ package.json:
{
"scripts": {
"start": "rollup -c rollup.config.dev.js -w",
"build:prod": "npm run clean && npm run bundle:prod",
"bundle:prod": "rollup -c rollup.config.prod.js",
"clean": "rm -rf knobs.min.js",
"test": "echo \"No test specified\"",
}
}
๊ฝค ํ์ค์ ์ธ ์คํฌ๋ฆฝํธ ๋ฌถ์์ผ๋ก ํฅ๋ฏธ๋ก์ด ์ด์ผ๊ธฐ๋ ์์ต๋๋ค.
ํจํค์ง๋ฅผ ๊ฒ์ํ๋ ค๋ฉด ์๋ํ๋์ง ์์ ๋ฆด๋ฆฌ์ค ํ๋ฆ ์์ ์์ ๋จผ์
npm build:prod
์ ์คํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ ๋ฆฌ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ๋ค์ watch
๋ช
๋ น ์์ด ์คํ๋๋ ๋ฒ๋ค๋ง ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ฉ๋๋ค. ์ฝ๋ ๋ณ๊ฒฝ ์์. ๊ทธ๋ฐ ๋ค์ ์ปค๋ฐํ๊ณ git ํ๊ทธ๋ฅผ ์ถ๊ฐํ๊ณ ํ๊ทธ, ๋ชจ๋ ๊ฒ์ ํธ์ํ ๋ค์ ์ฝ๋๋ฅผ ๊ฒ์ํฉ๋๋ค. (๋๋ ๊ฒ์ํ ๋ค์ ํธ์).๋ช ๊ฐ์ง ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์์ ์์ ํ๋ฆ์ ์๋ํ(๋๋ ๋ฐ์๋ํ)ํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง ๋งค์ฐ ์ ์ฉํ ํน์ ๋๊ตฌ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ถ์ต๋๋ค.
https://github.com/sindresorhus/np
np
์ ์ ์ธ๊ณ์ ์ผ๋ก ๊ฐ์ฅ ์ ์ค์น๋ฉ๋๋ค. npm i -g np
headr
์ ๋ฒ์ , ์์ฑ์ ์ด๋ฆ, ๋ฆฌํฌ์งํ ๋ฆฌ URL ๋ฑ๊ณผ ๊ฐ์ package.json
ํ์ผ ์์ฒด์ ์ ๋ณด๋ฅผ ํฌํจํ๋ dist ํ์ผ์ ํค๋ ์ฃผ์์ ์๋ํํ๊ธฐ ์ํ ํ๋ฅญํ ํจํค์ง์
๋๋ค. ์ํ๋ ๊ฒฝ์ฐ ์ค์นํ์ญ์์ค. pkg-ok
์ (์ค์ํ) ํ์ผ์ด ๋๋ฝ๋์ง ์์๋์ง ํ์ธํ๋ ๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์
๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. package.json ๋ณ๊ฒฝ ํ ๐ค:
{
"scripts": {
"start": "rollup -c rollup.config.dev.js -w",
"build:prod": "npm run clean && npm run bundle:prod",
"bundle:prod": "rollup -c rollup.config.prod.js",
"clean": "rm -rf knobs.min.js",
"test": "echo \"No test specified\"",
"header": "headr knobs.min.js -o=knobs.min.js --version --homepage",
"version": "npm run build:prod && npm run header && git add .",
"prepublishOnly": "pkg-ok"
}
}
๊ฒ์ ๋ฐ ํธ์์ ์ฌ์ฉ๋๋ ๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
np --yolo
๐ง ํ ์คํธ๋ฅผ ๊ฑด๋๋ฐ๊ณ (ํ ์คํธ๊ฐ ์์)
--yolo
์ ์ ๋ฆฌํ์ง ์๊ณ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ค์ ์ค์นํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ node_modules
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
np
package also allows writing a pre-defined configuration withinpackage.json
itself, using thenp
property.
version
(npm ์คํฌ๋ฆฝํธ ์์ฑ)์ lifecycle script hook์ผ๋ก ์ฝ๋๋ฅผ ๋น๋ํ๊ณ ๋ฒ๋ค์ ์ถ๋ ฅํ๊ณ ๋ฐฉ๊ธ ์ถฉ๋ํ ๋ฒ์ ๋ฒํธ์ ํจ๊ป ํค๋ ์ฃผ์(๋ชจ๋ ํ์ผ์)์ ์ถ๊ฐํ๊ธฐ ์ํด ์ ์ ํ ์๊ฐ์ ์ ํํ๊ฒ ์คํ๋ฉ๋๋ค.prepublishOnly
(npm ์คํฌ๋ฆฝํธ ์์ฑ) ์๋ช
์ฃผ๊ธฐ ํํฌ๋ pkg-ok
์ ์ฌ์ฉํ์ฌ ์งํํ๊ธฐ ์ ์ ๋๋ฝ๋ ํ์ผ์ด ์๋์ง ํ์ธํ๊ธฐ์ ์ข์ ์์น์
๋๋ค.๐โโ๏ธ ์ ๋ช ๋ น(
np --yolo
)์ ์คํํ๋ฉด GUI๊ฐ ํ์๋ฉ๋๋ค:(np
repo์ ์คํฌ๋ฆฐ์ท)๋ชจ๋ ๊ฒ์ด ์์กฐ๋กญ๊ฒ ์งํ๋๋ฉด ํจํค์ง๊ฐ ๊ฒ์๋๊ณ ์ ๋ธ๋ผ์ฐ์ ํญ/์ฐฝ์์ ํ๋ก์ ํธ์ GIT ๋ฆฌํฌ์งํ ๋ฆฌ URL์ด ์ด๋ฆฌ๋ฏ๋ก ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํ๊ทธ๊ฐ ์ง์ ๋ ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์น์ธ ๋ฐ ๊ฒ์ํ ์ ์์ต๋๋ค.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ NPM ํจํค์ง ๊ฒ์ ๋ฐ GIT ๋ฒ์ ๊ด๋ฆฌ ์๋ํ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/yaireo/automate-npm-package-publish-git-versioning-5cfpํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค