๐Ÿค ์€์ง€log ๐Ÿค

TypeScript๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งŒ๋“ค๊ธฐ ๋ณธ๋ฌธ

๐ŸŒธ Library

TypeScript๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งŒ๋“ค๊ธฐ

Eun_zii 2022. 11. 9. 20:13

์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ํ•˜์ง€๋ง๊ณ  ์šฐ๋ฆฌ๋งŒ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ž๊ณ  ํ•˜์—ฌ

๋‚ด๊ฐ€ ๋งก๊ฒŒ๋˜์—ˆ๋Š”๋ฐ ..

์ดˆ๋ณด ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ๋„ํ†ต ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๊ฒ ๊ณ  ์–ด๋””์„œ ๋ถ€ํ„ฐ ์–ด๋–ป๊ฒŒ ์‹œ์ž‘ํ•˜๋Š”์ง€๋„ ๊ฐ์ด ์•ˆ์™€์„œ

์—ฌ๊ธฐ์ €๊ธฐ ๊ฒ€์ƒ‰ํ•ด๋ณด๊ณ  ๋Œ์–ด๋ชจ์€ ์ •๋ณด๋กœ  ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 

์ด๊ฒŒ ์ •๋‹ต์ด๋ผ๊ณ ๋Š” ํ• ์ˆ˜ ์—†์ง€๋งŒ ๋น„์Šทํ•œ ์ƒํ™ฉ์ด์‹  ๋ถ„๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋•จ ๐Ÿฅ

 

 

NPM Package ์ƒ์„ฑ ๋ถ€ํ„ฐ ๋ฐฐํฌ _์ง„์งœ์ง„์งœ์ตœ์ข…๐Ÿš€

์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ํ•˜์ง€๋ง๊ณ  ์šฐ๋ฆฌ๋งŒ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ž๊ณ  ํ•˜์—ฌ ๋‚ด๊ฐ€ ๋งก๊ฒŒ๋˜์—ˆ๋Š”๋ฐ .. ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ๋„ํ†ต ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๊ฒ ๊ณ  ์–ด๋””์„œ ๋ถ€ํ„ฐ ์–ด๋–ป๊ฒŒ

eun-jii.tistory.com

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป NPM Package๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑด

๋™์ผํ•˜๊ธฐ์— ๊ด€๋ จ ๊ธ€ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค. ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

 

 

npm

Bring the best of open source to you, your team, and your company Relied upon by more than 11 million developers worldwide, npm is committed to making JavaScript development elegant, productive, and safe. The free npm Registry has become the center of Java

www.npmjs.com

  • NPM ํšŒ์› ๊ฐ€์ž…ํ•ด์ฃผ๊ธฐ
  • ํšŒ์›๊ฐ€์ž… ์‹œ e-mail ์ธ์ฆ ํ•„์ˆ˜ (์ธ์ฆํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐฐํฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.)

 

๐Ÿ”† Package ์„ค์ •

 

์ €๋Š” React (create-react-app) + TypeScript์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์š”์ฆ˜ ํ”„๋กœ์ ํŠธ๋“ค์€ ๋Œ€๋ถ€๋ถ„ TypeScript๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ TypeScript๋ฅผ ์ง€์›ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ๋‚˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์–ธ์–ด๋Š” JavaScript๊ฐ€ ์•„๋‹Œ TypeScript๋ฅผ ํ†ตํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

 

๋ณธ์ธ์˜ ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.

[ํ”„๋กœ์ ํŠธ ๋ช…] ์—๋Š” ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํด๋”๋ช…์„ ์ž‘์„ฑํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

npx create-react-app [ํ”„๋กœ์ ํŠธ ๋ช…] --template typescript

 

 

์‚ฌ์ง„๊ณผ ๊ฐ™์ด ํด๋” ๋‚ด์— ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.

 

tsconfig.json ์—์„œ Npm์„ ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ

๋ช‡ ๊ฐ€์ง€ ์„ค์ •์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

"compilerOptions": {
    "target": "es5", // 'es3', 'es5', 'es2015', 'es2016', 'es2017','es2018', 'esnext' ๊ฐ€๋Šฅ
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true, // js ํŒŒ์ผ๋“ค ts์—์„œ importํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€
    "checkJs": true, // ์ผ๋ฐ˜ js ํŒŒ์ผ์—์„œ๋„ ์—๋Ÿฌ์ฒดํฌ ์—ฌ๋ถ€
    "skipLibCheck": true,
    "esModuleInterop": true,
    "removeComments": true, //์ปดํŒŒ์ผ์‹œ ์ฃผ์„์ œ๊ฑฐ
    "allowSyntheticDefaultImports": true,
    "strict": true, //strict ๊ด€๋ จ, noimplicit... ๊ด€๋ จ ๋ชจ๋“œ ์ „๋ถ€ ์ผœ๊ธฐ
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true, //switch๋ฌธ ์ด์ƒํ•˜๋ฉด ์—๋Ÿฌ๋‚ด๊ธฐ
    "module": "esnext", //๋ฌด์Šจ import ๋ฌธ๋ฒ• ์“ธ๊ฑด์ง€ 'commonjs', 'amd', 'es2015', 'esnext'
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": false,
    "jsx": "react-jsx", // tsx ํŒŒ์ผ์„ jsx๋กœ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผํ•  ๊ฒƒ์ธ์ง€ 'preserve', 'react-native', 'react'
    "declaration": true, //์ปดํŒŒ์ผ์‹œ .d.ts ํŒŒ์ผ๋„ ์ž๋™์œผ๋กœ ํ•จ๊ป˜์ƒ์„ฑ (ํ˜„์žฌ์“ฐ๋Š” ๋ชจ๋“  ํƒ€์ž…์ด ์ •์˜๋œ ํŒŒ์ผ)
    "outDir": "./dist", //jsํŒŒ์ผ ์•„์›ƒํ’‹ ๊ฒฝ๋กœ๋ฐ”๊พธ๊ธฐ
    "outFile": "./", //๋ชจ๋“  tsํŒŒ์ผ์„ jsํŒŒ์ผ ํ•˜๋‚˜๋กœ ์ปดํŒŒ์ผํ•ด์คŒ (module์ด none, amd, system์ผ ๋•Œ๋งŒ ๊ฐ€๋Šฅ)
    "noImplicitAny": true, // any๋ผ๋Š” ํƒ€์ž…์ด ์˜๋„์น˜์•Š๊ฒŒ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋„์›Œ์ฃผ๋Š” ์„ค์ •
    "strictNullChecks": true, // null, undefined ํƒ€์ž…์— ์ด์ƒํ•œ ์กฐ์ž‘ํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋„์šฐ๋Š” ์„ค์ •
    "strictFunctionTypes": true, //ํ•จ์ˆ˜ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์ฒดํฌ ๊ฐ•ํ•˜๊ฒŒ
    "strictPropertyInitialization": true, //class constructor ์ž‘์„ฑ์‹œ ํƒ€์ž…์ฒดํฌ ๊ฐ•ํ•˜๊ฒŒ
    "noImplicitThis": true, //this ํ‚ค์›Œ๋“œ๊ฐ€ any ํƒ€์ž…์ผ ๊ฒฝ์šฐ ์—๋Ÿฌ๋‚ด๊ธฐ
    "alwaysStrict": true, //์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ "use strict" ๋ชจ๋“œ ์ผœ๊ธฐ
    "noUnusedLocals": true, //์“ฐ์ง€์•Š๋Š” ์ง€์—ญ๋ณ€์ˆ˜ ์žˆ์œผ๋ฉด ์—๋Ÿฌ๋‚ด๊ธฐ
    "noUnusedParameters": true, //์“ฐ์ง€์•Š๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์žˆ์œผ๋ฉด ์—๋Ÿฌ๋‚ด๊ธฐ
    "noImplicitReturns": true //ํ•จ์ˆ˜์—์„œ return ๋นผ๋จน์œผ๋ฉด ์—๋Ÿฌ๋‚ด๊ธฐ
    }

 

โœ… ๊ฐœ๋ฐœ ์‹œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ค๊ณผ ์„ค๋ช… ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ณธ์ธ์ด ํ•„์š”ํ•œ ๊ฒƒ๋“ค๋งŒ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ €๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์„ค์ •๋งŒ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

create-react-app typescript version ๊ธฐ์ค€

 

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": false,
    "jsx": "react-jsx",
    "declaration": true,
    "outDir": "./dist"
  },
  "include": ["./src/lib/**/*.tsx", "./src/lib/**/*.ts"]
}

 

1. "noEmit": false

noEmit ์˜ต์…˜์€ ์ถœ๋ ฅ์„ ๋‚ด๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.
npm ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ ํ˜น์€ ํŒŒ์ผ์ด ์ถœ๋ ฅ์œผ๋กœ ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

2. "declaration": true

. d.tsํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ์˜ต์…˜์„ true๋กœ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

3. "outDir": "./dist"

tsc ๋ช…๋ น์–ด๋กœ ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ๋“ค์ด ์–ด๋””์— ์œ„์น˜ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
dist ํด๋”์— ๋‘๊ธฐ ์œ„ํ•ด์„œ ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

4. "include" ์†์„ฑ

tsc ๋ช…๋ น์–ด๋กœ ์ปดํŒŒ์ผํ•  ํŒŒ์ผ์ด ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€๋ฅผ ๋ช…์‹œํ•ด์ฃผ๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
์ €๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœํ•  ์œ„์น˜๋ฅผ src ํด๋”์—์„œ lib ํด๋”๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ทธ ์•ˆ์—์„œ ๊ฐœ๋ฐœ์„ ํ•  ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑ์„ ํ•ฉ๋‹ˆ๋‹ค.

"include": ["./src/lib/**/*.tsx", "./src/lib/**/*.ts"]

 

์ด ์™ธ์˜ ์˜ต์…˜๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ์„ ํƒ์ ์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ ์œผ๋กœ ํ•„์š”ํ•œ ์˜ต์…˜์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ์ฐธ๊ณ ํ•˜์„ธ์š”.

 

tsconfig.json์˜ ์ˆ˜์ •์„ ๋งˆ์ณค๋‹ค๋ฉด package.json์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
package.json์—๋Š” ๋‚ด๊ฐ€ ๋ฐฐํฌํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ •๋ณด๋“ค์„ ์ ์–ด์ฃผ๊ณ ,
๋ฐฐํฌํ•  ํŒŒ์ผ๋“ค์˜ ์—”๋“œํฌ์ธํŠธ๋“ค์„ ์ ์–ด์ค๋‹ˆ๋‹ค.


๊ผญ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. "name"

 

์ œ์ผ ์ค‘์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด๋ฆ„์„ ์ ์–ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด๋ผ๋ฉด ์ค‘๋ณต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด๋ฆ„์€ ๋‚ด๊ฐ€ ๋งŒ๋“ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์žฅ ์ž˜ ํ‘œํ˜„ํ•˜๊ณ  ์ฐพ๊ธฐ ์‰ฌ์šด ์ด๋ฆ„์„ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”.

 

npm info <Package Name>

 

 ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต ํ™•์ธ์„ ํ•ด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ค‘๋ณต๋œ ์ด๋ฆ„์ด๋ผ๋ฉด ์ด๋ฏธ ๋ฐฐํฌ๋œ ํŒจํ‚ค์ง€์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ ,

์ค‘๋ณต๋˜์ง€ ์•Š์€ ์ด๋ฆ„์ด๋ผ๋ฉด ์ •๋ณด๊ฐ€ ์—†๊ธฐ์— 404 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 

โœ… 404 ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๋ฉด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. โœ…

 

2. "description"

 

ํ”„๋กœ์ ํŠธ ์„ค๋ช…์œผ๋กœ, ๋ฌธ์ž์—ด๋กœ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.
npm search๋กœ ๊ฒ€์ƒ‰๋œ ๋ฆฌ์ŠคํŠธ์— ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค์ด ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์•„๋‚ด๊ณ  ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

// ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค
"description": "Very Very Awesome Component"

 

3. "version"

 

"version": "0.0.1"

 

์šฐ๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.
๋ฒ„์ „์€ ๊ธฐ๋ณธ์ ์œผ๋กœ major.minor.patch (0.0.1)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜์—ˆ๊ณ , ๋ฐฐํฌ๋งŒ์„ ๋‚จ๊ฒจ๋‘” ์ƒํ™ฉ์ด๋ผ๋ฉด 1.0.0์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ๊ฐœ๋ฐœ ์ค‘์ด๊ณ , ์™„๋ฒฝํ•˜์ง€ ์•Š๋‹ค๋ฉด 0.0.1์„ ์ง€์ •ํ•˜์—ฌ ์•ˆ์ •์ ์ธ ๋ฒ„์ „์ด ์•„๋‹˜์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

 

โš ๏ธ์ฃผ์˜โš ๏ธ ํŒจํ‚ค์ง€๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ npm์— ๋ฐฐํฌํ•  ๋•Œ๋Š” ๋ฒ„์ „์„ ๋ฌด์กฐ๊ฑด ์˜ฌ๋ ค์„œ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์•ˆ ๊ทธ๋Ÿฌ๋ฉด ๋ฒ„์ „์ด ๊ฒน์ณ์žˆ๋‹ค๊ณ  ์—๋Ÿฌ๊ฐ€ ๋œน๋‹ˆ๋‹ค.

package.json์˜ version ๋ช…์‹œํ•˜๋Š” ๋ฒ•์ด ๋” ์•Œ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ์ฐธ๊ณ ํ•˜์„ธ์š”.

 

4. "private"

 

"private": false

 

์ค‘์•™ ์ €์žฅ์†Œ์ธ npm์— ์˜คํ”ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด private ์˜ต์…˜์„ false๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”.

 

5. "main"

 

"main": "dist/index.js"

 

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ง„์ž…์  ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ฃผ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.
์ €๋Š” dist ํด๋”๋กœ ์ƒ์„ฑํ•ด์„œ ๋ฐฐํฌํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—
dist ํด๋”์— ์žˆ๋Š” index.js ํŒŒ์ผ๋กœ ๋ช…์‹œํ•ด์ฃผ์„ธ์š”.
(typescript ํŒŒ์ผ์€ tsc ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ js๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.)

 

6. "types"

 

"types": "dist/index.d.ts"

 

ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํƒ€์ž… ์ถ”๋ก ์„ ๋„์™€์ฃผ๋Š” ์ง„์ž…์  ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ค๋‹ˆ๋‹ค.

 

โš ๏ธ์ฃผ์˜โš ๏ธ package.json์ด "files" ํ”„๋กœํผํ‹ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉด "types" ํ”„๋กœํผํ‹ฐ๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ๋ฉ”์ธ ์„ ์–ธ ํŒŒ์ผ์„ "files" ํ”„๋กœํผํ‹ฐ์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

7. "browser"

 

"browser": "./browser/specific/main.js"

 

์šฐ๋ฆฌ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ตฌ๋™๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— browser ํ•„๋“œ๋„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ(client-side) ์‚ฌ์šฉ์„ ์œ„ํ•˜๋Š” ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒˆ๋“ค๋Ÿฌ ๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ ๋„๊ตฌ์— ๋Œ€ํ•œ ํžŒํŠธ๋กœ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด main ์˜ต์…˜(field) ๋Œ€์‹ ์— ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

8. "keywords"

 

๋ณธ์ธ์˜ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ฐธ์กฐ๋˜๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

(ํ•ด์‹œํƒœ๊ทธ# ๊ฐ™์€ ๊ฐœ๋…์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.)
description๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ npm search๋กœ ๊ฒ€์ƒ‰๋œ ๋ฆฌ์ŠคํŠธ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

 

// ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค
"keywords" : ["react", "component", "library", "scroll"]

 

9. "scripts"

 

  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "prepare": "rm -rf dist && mkdir dist && tsc"
  },

 

prepare ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด๋†“์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

1. rm -rf dist ๋ช…๋ น์–ด๋กœ distํด๋”๋ฅผ ์‚ญ์ œํ•˜๊ณ 

2. mkdir dist ๋ช…๋ น์–ด๋กœ ๋‹ค์‹œ dist ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ 

3. ๋‹ค์‹œ ๋งŒ๋“ค์–ด์ง„ ํด๋”์— tsc ๋ช…๋ น์–ด๋กœ ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•ด์„œ ๋‚˜์˜จ ํŒŒ์ผ๋“ค์„ dist์— ๋„ฃ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

 

npm ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ์ „์— ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

 

10. "author"

 

"author": "eun-ji <eun_ji_zz@naver.com>",

 

ํ”„๋กœ์ ํŠธ ์ž‘์„ฑ์ž ์ •๋ณด๋กœ, ํ•œ ์‚ฌ๋žŒ๋งŒ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต Name <Email Address> ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

11. "repository"

 

ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•œ ์ €์žฅ์†Œ์˜ ์ •๋ณด์ž…๋‹ˆ๋‹ค.
์†Œ์Šค ์ฝ”๋“œ์— ์ฐธ์—ฌํ•˜๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ํ”„๋กœ์ ํŠธ์˜ ํ™ˆํŽ˜์ด์ง€ url์„ ๋ช…์‹œํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

 

// ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
"repository" : {
	"type": "git",
    "url" : "git://gitbub.com/documentcloud/test.git"
 },

 

12. "license"

 

"license": "MIT",

 

๋ฐฐํฌํ•˜๋ ค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ผ์ด์„ ์Šค์ž…๋‹ˆ๋‹ค.

์ž์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ผ์ด์„ ์Šค์— ๋งž๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ex) MIT, ISC ๋“ฑ

๋ผ์ด์„ ์Šค์— ํ‚ค์›Œ๋“œ์— ๊ด€ํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ์‚ฌํ•ญ์€ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

๐Ÿ”† .npmignore

 

npm์— ๋ฐฐํฌํ•˜์ง€ ์•Š์„ ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ค๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” dist ํด๋”๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ src ํด๋”, public ํด๋”, tsconfig๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์€

์šฐ๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ์‹œ์ผœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํ‚ค์šธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํด๋”๋‚˜ ํŒŒ์ผ์€ ์ด๊ณณ์—์„œ ๋ช…์‹œํ•ฉ์‹œ๋‹ค.

 

 

โœ… ๋ณธ์ธ์ด ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค๋งŒ ์„ค์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ํด๋”๋‚˜ ํŒŒ์ผ์ด ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

 

node_modules/
src/
public/
tsconfig.json

 

๐Ÿ”† ๊ฐœ๋ฐœ ์ง„ํ–‰

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ ํด๋”๋Š” lib์œผ๋กœ  tsconfig.json์—์„œ ์„ค์ •ํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์—
lib ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฑฐ๊ธฐ์— index.tsx ํŒŒ์ผ์— ์šฐ๋ฆฌ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚ด๋ณด๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ› ๏ธ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ CSS-in-JS๊ฐ€ ์•„๋‹Œ CSS, SASS, SCSS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ „์ฒ˜๋ฆฌ(webpack)๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ณ ,

๊ฐœ๋ฐœ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ์˜ ์˜์กด์„ฑ(Dependencies)๋„ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํŽธ์˜์„ฑ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋ฉด ์—ฌ๋Ÿฌ ์„ค์ •(๊ฒ€์ƒ‰ํ•ด๋ณด์‹œ๊ธธ..๐Ÿงš‍โ™€๏ธ)๋„ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ› ๏ธ

 

๐Ÿ“ฆsrc
 โ”ฃ ๐Ÿ“‚lib
   โ”ฃ ๐Ÿ“‚[Component]
   โ”ƒ โ”— ๐Ÿ“œindex.tsx
   โ”— ๐Ÿ“œindex.tsx

 

ํด๋”์˜ ๊ตฌ์กฐ๋Š” ๋Œ€๋žต ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ๊ณ ,

[Component] ๋‚ด์— index.tsx ํŒŒ์ผ์€ ์ž‘์„ฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๋‚ด๋ณด๋‚ด์ง€๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚ด๋ณด๋‚ผ ๊ฐ€๋Šฅ์„ฑ์„ ์ƒ๊ฐํ•ด, src/lib/index.tsx ํŒŒ์ผ์„ ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚ด๋ณด๋‚ด๊ฒŒ๋” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

ํ•„์ž์˜ ๊ฒฝ์šฐ์—๋Š” ํ”„๋กœ์ ํŠธ ํŒ€ ์ด๋ฆ„์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  index.tsx ํŒŒ์ผ๊ณผ svg ํŒŒ์ผ์„ ๋‹ด์„ assets๋ฅผ ์„ค์ •ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

 

src/lib/index.tsx

๊ทธ๋ฆฌ๊ณ  src/lib/index.tsx ์—๋Š” export default๋ฅผ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. 

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋” ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด src/lib/index.tsx ์— export ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”† ๊ฐœ๋ฐœ ์ง„ํ–‰ ์‹œ ์ฐธ๊ณ ํ•˜๊ธฐ

 

๐Ÿ’ก ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ styled-components ์‚ฌ์šฉ ์‹œ,

 

// styled-components ๊ฐ€ ์„ค์น˜๊ฐ€ ์•ˆ๋˜์–ด ์žˆ๋‹ค๋ฉด
npm i styled-components

 

// ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ - ํƒ€์ž…์ •์˜ ๋ฐ›๊ธฐ
npm i -D @types/styled-components

 

๊ธฐ์กด JavaScript์—์„œ styled-components ์‚ฌ์šฉํ•˜์…จ์–ด๋„ TypeScript๋กœ ์ง„ํ–‰ ์‹œ์—๋Š”

ํƒ€์ž… ์ •์˜๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ svgํŒŒ์ผ import ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ,

 

 

// custom.d.ts
declare module '*.svg' {
    import React = require('react');
    export const ReactComponent: React.FC<React.SVGProps<SVGSVGElement>>;
    const src: string;
    export default src;
  }

 

custom.d.ts ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ํŒŒ์ผ ๋‚ด์—์„œ ๋ชจ๋“  svgํŒŒ์ผ์— ๋Œ€ํ•ด ์†์„ฑ์„ ์„ค์ •ํ•ด ์ค๋‹ˆ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  ts ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ts|tsx ํ™•์žฅ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก tsconfig.json ๋‚ด์— "include" ์†์„ฑ์— custom.d.ts๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ’ก ์ „์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ SCSS, SASS์™€ ๊ฐ™์€ ํŒŒ์ผ๋“ค์€ Webpack ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

๋””์ž์ธ์ด ๋งŽ์ด ์š”๊ตฌ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋ฉด CRA๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„์ถ”ํ•ฉ๋‹ˆ๋‹ค.
CRA๋Š” sass-loader๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ๋•Œ๋Š” ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฐฐํฌ๋ฅผ ํ•˜๊ณ  ๋‚˜์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋ฉด sass ํŒŒ์ผ์„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๊ณ  ์—๋Ÿฌ๋ฅผ ๋ฑ‰์Šต๋‹ˆ๋‹ค.
sass, scss loader ๊ฐ™์€ ์„ค์ •๋“ค์„ webpack์— ํ•ด์ฃผ์–ด์•ผ ํ•˜์ง€๋งŒ, CRA๋Š” webpack ์„ค์ •ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํž˜๋“ญ๋‹ˆ๋‹ค.

 

 

๐ŸŒฑ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” npm์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‚ด๋ณด๋‚ผ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”† Build ๋ฐ NPM ๋ฐฐํฌ ํ•˜๊ธฐ

 

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œ ํ›„, NPM์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

NPM์— ์ž์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์•„๋ž˜์— ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๊ทธ์ธ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ์ฐจ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

npm login

 

Password ์—๋Š” ์•”ํ˜ธํ™”๊ฐ€ ๊ฑธ๋ ค์žˆ๋Š”๊ฑด์ง€.. ์ž…๋ ฅ์ด ์•ˆ๋˜๋Š”๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅํ›„ ์—”ํ„ฐ ํ•˜๋ฉด Email๋กœ ๋„˜์–ด๊ฐ„๋Œœ..๐Ÿ˜ฎ‍๐Ÿ’จ

 

NPM ๊ณ„์ •์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

์œ ์ €๋„ค์ž„, ํŒจ์Šค์›Œ๋“œ, ์ด๋ฉ”์ผ ์ฃผ์†Œ๊นŒ์ง€ ์ž…๋ ฅํ•œ ํ›„ ํ•ด๋‹น ๋ฉ”์ผ์— ๋ฐœ์†ก๋œ ์ผํšŒ์„ฑ OTP ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๋กœ๊ทธ์ธ์„ ํ•˜์˜€๋‹ค๋ฉด ์•„๋ž˜์— ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ œ๋Œ€๋กœ ๋กœ๊ทธ์ธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

npm whoami

 

๋กœ๊ทธ์ธ๊นŒ์ง€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์•„๋ž˜์— ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ž์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ NPM์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

 

npm publish

package.json๋‚ด์— ์„ค์ •ํ•ด๋‘์—ˆ๋˜

"scripts": {
"prepare": "rm -rf dist && mkdir dist && tsc"
}

์ด ์‹คํ–‰๋˜๋ฉด์„œ dist ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•ด์„œ ๋‚˜์˜จ ํŒŒ์ผ๋“ค์„ /dist์— ๋„ฃ์–ด์ฃผ๋Š” ๊ณผ์ •๋„ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿฅ ์ด๋ ‡๊ฒŒ ํ•ด์„œ TypeScript๋กœ NPM Package๋ฅผ ๋งŒ๋“ค์–ด 

์ž์‹ ์˜ Library๋ฅผ ์ƒ์„ฑ๋ถ€ํ„ฐ_๋ฐฐํฌ๊นŒ์ง€ ํ•˜๋Š” ๋ฒ•์„ ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๐Ÿฅ

 

๐Ÿ™…๐Ÿป‍โ™€๏ธ ๋‹น์—ฐํ•˜์ง€๋งŒ ์œ„์˜ ๊ณผ์ •๋“ค์ด ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋•Œ ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค. ๐Ÿ™…๐Ÿป‍โ™€๏ธ

 

 

๐Ÿ”† Open Source Library ์ง„ํ–‰ ์‹œ ์ค‘์š”ํ•œ ๊ฒƒ

 

โœ… ๊ณต์‹๋ฌธ์„œ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์ œ์ผ ์ค‘์š”์‹œํ•ด์•ผ ํ•˜๋Š” ์š”์†Œ ์ค‘์— ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
๊ณต์‹๋ฌธ์„œ๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ์š”์†Œ๋“ค์€ ๋”ฐ๋ผ์„œ ์˜ค๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋ฉฐ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ ,

์‚ฌ์šฉ๋ฐฉ๋ฒ•๊ณผ ์ข…๋ฅ˜์— ๋Œ€ํ•ด์„œ๋„ ์„ค๋ช…์„ ์ž˜ํ•ด๋†“๋Š”๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

โœ… README.md

README ํŒŒ์ผ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์–ผ๊ตด์ž…๋‹ˆ๋‹ค.

๊นƒํ—ˆ๋ธŒ์—์„œ ์‚ฌ์šฉ์ž๋“ค์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ๊ณ , ๋งจ ์ฒ˜์Œ ๋ณด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด README ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๋ณ„ํžˆ ์‹ ๊ฒฝ์„ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž์‹ ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ •์ฒด์„ฑ์„ ์ž˜ ํ‘œํ˜„ํ•˜๊ณ , ์‚ฌ์šฉ๋ฒ•๊ณผ ์„ค๋ช…์„ ์ ์–ด๋‘์‹œ๋ฉด ๋˜๋Š”๋ฐ, 

์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์œ ๋ช… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ README๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑ์„ ํ•ด๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

โœ… ๋ผ์ด์„ ์Šค

์œ„ package.json ์ž‘์„ฑ์—์„œ๋„ ์–ธ๊ธ‰ํ•ด๋†“์•˜์ง€๋งŒ, ๋ผ์ด์„ ์Šค๋Š” 'ํ•ด์•ผ ํ•  ๊ฒƒ'๊ณผ 'ํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๊ฒƒ'์— ๋Œ€ํ•œ ์•ฝ์†์ž…๋‹ˆ๋‹ค.
์˜คํ”ˆ์†Œ์Šค๋Š” ๋ชจ๋‘์—๊ฒŒ ๊ณต๊ฐœ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์•ฝ์†์€ ๋”๋”์šฑ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Github ๋ฌธ์„œ์— ์˜ํ•˜๋ฉด, ๋ผ์ด์„ ์Šค๊ฐ€ ์—†์œผ๋ฉด ๊ธฐ๋ณธ ์ €์ž‘๊ถŒ๋ฒ•์ด ์ ์šฉ๋˜์ง€๋งŒ, ๋ผ์ด์„ ์Šค๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๋ชจ๋“  ๊ถŒ๋ฆฌ๋Š” ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋‚ด ์ฝ”๋“œ๋ฅผ ๋ณต์ œ, ๋ฐฐํฌ, ์žฌ์ƒ์‚ฐ์„ ํ•  ์ˆ˜ ์—†์œผ๋‹ˆ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ ์Šค๋ฅผ ์„ ํƒํ•˜๋ผ๊ณ  ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : Github license์˜ ์ข…๋ฅ˜์™€ ๋‚˜์—๊ฒŒ ๋งž๋Š” ๋ผ์ด์„ ์Šค ์„ ํƒํ•˜๊ธฐ

 

โœ… Contribute

์˜คํ”ˆ์†Œ์Šค๋Š” ํ˜ผ์ž ๋งŒ๋“ค ๋•Œ ๋ณด๋‹ค, ๊ฐ™์ด ๋งŒ๋“ค ๋•Œ ๊ทธ ๊ฐ€์น˜๊ฐ€ ๋”์šฑ ๋น›๋‚ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ์—ฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ตฌ์กฐ๋ฅผ ์งค์ง€,
์„ค๋ช…์€ ์–ด๋–ป๊ฒŒ ํ• ์ง€, ์–ด๋–ป๊ฒŒ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํ™œ์„ฑํ™”์‹œํ‚ฌ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ˜ผ์ž ํ•ด์„œ ํ‚ค์›Œ๋‚˜๊ฐ€๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์ž๋ฐœ์ ์œผ๋กœ ๋„์™€์ฃผ๋„๋ก ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด ๋‚ด๊ฐ€ ๋“ค์ด๋Š” ์‹œ๊ฐ„์€ ์ค„์ด๋ฉด์„œ ๋”์šฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹จ๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

728x90