jotai | theme | funnel | goostate | pinterest
* Illustration created by ๆฒขๅบต
npm : | KO | EN | JA |
---|---|
Creation guide: | KO | EN | JA |
๋จผ์ , npm init ๋ช ๋ น์ด๋ฅผ ํตํด ์๋ก์ด ํจํค์ง๋ฅผ ์์ฑํด์.
> npm init
๋ชจ๋ ์ค์ ์ ์ง๊ธ ์๋ฃํ ํ์๋ ์์ต๋๋ค. ํจํค์ง ์์ฑ ํ package.json ํ์ผ์ ์ง์ ์์ ํ์ฌ ํ์ํ ์ค์ ์ ์ถ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ด์ง์! :)
Typescript๋ฅผ ํจํค์ง์ ์ ์ฉํ๋ ค๋ฉด, ์๋์ ๊ฐ์ด ๊ฐ๋ฐ ์์กด์ฑ์ผ๋ก Typescript์ Node.js ํ์ ์ ์๋ฅผ ์ค์นํด์ค์!
> npm install --save-dev typescript @types/node
package.json ํ์ผ์ ํจํค์ง์ ์ ๋ณด์ ์์กด์ฑ์ ์ ์ํด์. ์๋์ ์์๋ฅผ ์ฐธ์กฐํ์ธ์!
"build": "tsc"
๋ Typescript๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง package.json์ ์ถ๊ฐ๋๋ ์ต์
์ด์์! :)
{
"name": "module-name",
"version": "1.0.0",
"description": "",
"main": "lib/index.js",
"files": ["lib"],
"types": "lib/index.d.ts",
"private": false,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "tsc"
},
"author": "pengoose",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.3.3",
"typescript": "^5.1.6"
}
}
tsconfig์ค์ (Typescript ์ฌ์ฉ ์)
Typescript ํ๋ก์ ํธ์์ tsconfig.json ํ์ผ์ ํตํด ์ปดํ์ผ๋ฌ ์ต์ ์ ์ค์ ํ ์ ์์ด์. :)
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "./lib",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*"]
}
๋ณธ์ธ์ ์์ด๋์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ ๋จ๊ณ์์! :) "๋ผ์ด๋ธ๋ฌ๋ฆฌ"๋ "๋ชจ๋"์ ๋ง๋ ๋ค๊ณ ๋๋ฌด ๊ฒ์ ๋จน์ ํ์๋ ์์ด์!
๋ชจ๋์ ๋ง๋ ๋ค๋ ๊ฒ์, ์์ฃผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ , ์ด๋ฅผ ์ด๋ ํ๋ก์ ํธ์์๋ ๋๊ตฌ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐฐํฌํ๋ ํ์๋ฅผ ์๋ฏธํด์.
ํ์์ ์์ฃผ ์ฐ๋ ์ปค์คํ ํ ์ด๋, ์ ํธ๋ฆฌํฐ ์ฝ๋, ๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ ๋ค์ํ ์์๋ค ๋ชจ๋๊ฐ ๋ฉ์ง ๋ชจ๋์ด ๋ ์ ์๋ต๋๋ค!
- ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ์ ๋ ฅ๊ฐ์ด ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ๊ฒ์ฆํ๋ ํจ์๋ค์ ์งํฉ
- ์์ฃผ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ: ์ ๋ ฌ, ํ์ ๋ฑ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ์ ๋์ ๋ชจ๋
- API ์์ฒญ ๋ํผ: ํน์ API์ ๋ํ ์์ฒญ์ ์ฝ๊ฒ ๋ณด๋ผ ์ ์๋๋ก ๋ํํ ํจ์
- UI ์ปดํฌ๋ํธ: ๋ฒํผ, ํผ, ๋ค์ด์ผ๋ก๊ทธ ๋ฑ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์ปดํฌ๋ํธ
์๊ฐ๋ณด๋ค ๊ฐ๋จํ๊ณ ๋ฉ์๋ ์ผ์ด์ฃ ? ๐ฅณ
์ด์ ๋ชจ๋์ ์ฌ์ฉ๋ฒ์ ๋ฌธ์ํ ํ ์๊ฐ์ด์์! ๋น์ ์ด ๋ง๋ ๋ฉ์ง ์ฝ๋๋ฅผ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฝ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ์น์ ํ๊ณ ๋ช ํํ๊ฒ ์์ฑํ๋ ๊ฒ์ด ์ค์ํด์.
readme ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ํฌํจํ๋ ๊ฒ์ด ์ข์์!
๋ชจ๋์ ์ค๋ช
: ์ด ๋ชจ๋์ด ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฑฐ๋ ์ด๋ค ๊ธฐ๋ฅ์ ์ ๊ณตํ๋์ง ๊ฐ๋ตํ๊ฒ ์ค๋ช ํด์ฃผ์ธ์. ์ฌ์ฉ์๊ฐ ์ด ๋ชจ๋์ด ์ด๋ค ์ญํ ์ ํ๋์ง ์ฝ๊ฒ ์ดํดํ ์ ์๋ต๋๋ค!์ค์น ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ
: ์ด ๋ชจ๋์ ์ด๋ป๊ฒ ์ค์นํ๊ณ ์ฌ์ฉํ๋์ง ์์ธํ๊ฒ ์ค๋ช ํด์ฃผ์ธ์!์์ ์ฝ๋
: ์ค์ ๋ก ์ด ๋ชจ๋์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๋ณด์ฌ์ฃผ๋ ์์ ์ฝ๋๋ ์ฌ์ฉ์๊ฐ ์ดํดํ๋๋ฐ ๋ง์ ๋์์ด ๋ ๊ฑฐ์์. :)API ๋ฌธ์
: ๋ชจ๋์ด ์ ๊ณตํ๋ ํจ์๋ ๋ฉ์๋, ๊ทธ๋ฆฌ๊ณ ์ด๋ค์ ์ธ์์ ๋ฐํ๊ฐ ๋ฑ์ ์์ธํ๊ฒ ๋ฌธ์ํํด์ฃผ์ธ์!
์ด๋ ๊ฒ ๋ฌธ์๋ฅผ ์ ์์ฑํ๋ ์ฐ์ต์ ๋น์ ์ ์ฝ๋๊ฐ ์ผ๋ง๋ ์ฌ์ฉ์ ์นํ์ ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ฉฐ, ๊ฐ๋ฐ์๋ก์ "ํ์ ๋ฅ๋ ฅ"์ ํค์ฐ๋๋ฐ๋ ํฐ ๋์์ด ๋ ๊ฑฐ์์. ๋๋ฌด ๊ฒ๋จน์ง ๋ง๊ณ ์์ํด๋ณผ๊น์? :)
Typescript ๋๋ Babel์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ปดํ์ผํ๋ ๊ณผ์ (build)์ ๊ฑฐ์ณ ์์ค ์ฝ๋๋ฅผ ๋น๋ํด์ผ ํด์!
> npm run build
์ด ๋ช ๋ น์ด๋ ์์์ ์์ฑํ tsconfig.json์ ๋ฐ๋ผ, ๋น๋๋ ํ์ผ๋ค์ด ํ๋ก์ ํธ ๋ฃจํธ์ lib ํด๋ ๋ด์ ์์ฑ๋๊ฒ ๋์ด์์ด์.
npm ๋ชจ๋์ ๋ฐฐํฌํ๊ธฐ ์ํด์๋, npm์์ ๊ณ์ ์ ์์ฑํด์ผ ํด์!
๊ณ์ ์์ฑ์ ๋ง์ณค๋ค๋ฉด, ํฐ๋ฏธ๋์์ npm login ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ๋ก๊ทธ์ธํฉ๋๋ค :)
> npm login
๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉด, npm publish ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ๋ฐฐํฌํด์.
> npm publish
๋จ, package.json์ version ํ๋๊ฐ ์ด์ ์ ๋ฐฐํฌ๋ version๋ณด๋ค ๋์์ผ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํด์!
{
"version": "1.0.0" // ์ด์ ์ ๋ฐฐํฌ๋ version
}
{
"version": "1.0.1" // ์๋ก์ด version (๋ฌธ์๋ฅผ ์์ ํ ๊ฒฝ์ฐ์๋)
}
๐ ์ถํํด์! ์ฌ๋ฌ๋ถ์ ๋ฉ์ง ํจํค์ง๊ฐ npm์ ๊ณต๊ฐ๋์์ด์! ๐ฅณ ์ด์ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ฌ๋ฌ๋ถ์ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์ฌ์ฉํ ์ ์์ด์.
์์ผ๋ก๋ ์ฌ๋ฌ๋ถ์ด ๋ง๋ ๋ฉ์ง ํจํค์ง์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ๊ณ , ๊ทธ ํผ๋๋ฐฑ์ ๋ฐํ์ผ๋ก ํจํค์ง๋ฅผ ๊ฐ์ ํ๋ ๊ณผ์ ์ด ์์๋ ๊ฑฐ์์. :) (๋๊ทผ๊ฑฐ๋ฆฌ์ง ์๋์?)
์๋ฅผ ๋ค์ด, ๊นํ๋ธ์ issue ํญ์์ ์ฌ์ฉ์๋ค์ ๋ฌธ์ ์ ์ ๋ค์ ์ ์๊ณ , feature ์์ฒญ์ ๋ฐ์ ์ ์์ด์! ๋ํ, Pull Request(PR)๋ฅผ ํตํด, ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ ๋์์ ๋ฐ์ ๋ ๋ฉ์ง ์ฝ๋๋ก ์ฑ์ฅ์ํฌ ์ ์์ด์.
์ฌ๋ฌ๋ถ๋ค์ ์ฒซ ํจํค์ง ๋ฐฐํฌ๋ฅผ ์ถํํ๋ฉฐ, ๋์์์ด ๋ฐฐ์ฐ๊ณ ์ฑ์ฅํ๋ ๊ฐ๋ฐ์์ ๊ธธ์ ํญ์ ์์ํด์! :)
์ฒซ ๋ฐฐํฌ ๊ณผ์ ์ ํจ๊ปํ๊ฒ ๋์ด ์๊ด์ด์์ด์! ๐ฅฐ
package.json์ "private"๋ผ๋ filed๋ฅผ false๋ก ์ค์ ํ๋ฉด yarn์ผ๋ก๋ ํด๋น ๋ชจ๋์ ์ค์นํ ์ ์์ด์ :)
{
"private": false
}
"private": false,
๋ชจ๋์ "@"๊ฐ ๋ค์ด๊ฐ์ฑ๋ก npm publish๋ฅผ ์งํํ๊ฒ๋๋ฉด, npm์ด ํด๋น ํจํค์ง๋ฅผ ๋น๊ณต๊ฐ ํจํค์ง๋ก ์ธ์ํด ์ ๋ฃ ๊ฒฐ์ ๋ฅผ ํ๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํด์.
ํด๋น ์ ์ฅ์๊ฐ ๊ณต๊ฐ๋์ด์๋ ํจํค์ง๋ผ๋ ๊ฒ์ ์๋ ค์ฃผ๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ฐฐํฌ๋ฅผ ์งํํด์.
> npm publish --access=public
package.json์ "type"๋ผ๋ filed๋ฅผ "index.d.ts"๋ก ์ค์ ํ๋ฉด ํด๋น ๋ชจ๋์ด TS๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ์๋ฆด ์ ์์ด์. :)
{
"types": "index.d.ts"
}
package.json์ "repository"๋ผ๋ field๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ฉด ์ ์ฅ์๋ฅผ ์ฐ๋ํ ์ ์์ด์.
"repository": {
"type": "git",
"url": "repositoryURL"
}