Skip to content

Latest commit

ย 

History

History
96 lines (70 loc) ยท 4.71 KB

File metadata and controls

96 lines (70 loc) ยท 4.71 KB

์ด ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ ์„ ์–ธ ํŒŒ์ผ์„ ์ž‘์„ฑํ–ˆ์œผ๋ฏ€๋กœ, ์ด์ œ npm์— ๋ฐฐํฌํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. npm์— ์„ ์–ธ ํŒŒ์ผ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. npm ํŒจํ‚ค์ง€๋กœ ๋ฒˆ๋“ค๋งํ•˜๊ฑฐ๋‚˜
  2. npm์˜ @types organization์— ๋ฐฐํฌํ•˜๊ธฐ

๋งŒ์•ฝ ํŒจํ‚ค์ง€๊ฐ€ TypeScript๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๋ฉด ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. --declaration ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด, ์„ ์–ธ๊ณผ JavaScript๊ฐ€ ํ•ญ์ƒ ์ผ์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํŒจํ‚ค์ง€๊ฐ€ TypeScript๋กœ ์ž‘์„ฑ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

npm ํŒจํ‚ค์ง€์— ์„ ์–ธ ํฌํ•จํ•˜๊ธฐ (Including declarations in your npm package)

๋งŒ์•ฝ ํŒจํ‚ค์ง€๊ฐ€ ๋ฉ”์ธ .js ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ๋ฉ”์ธ ์„ ์–ธ ํŒŒ์ผ์„ package.json์—๋„ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๋“ค๋ง๋œ ์„ ์–ธ ํŒŒ์ผ์„ types ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด:

{
    "name": "awesome",
    "author": "Vandelay Industries",
    "version": "1.0.0",
    "main": "./lib/main.js",
    "types": "./lib/main.d.ts"
}

"typings" ํ•„๋“œ๋Š” "types"์™€ ๋™์˜์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋งŒ์•ฝ ๋ฉ”์ธ ์„ ์–ธ ํŒŒ์ผ ์ด๋ฆ„์ด index.d.ts์ด๊ณ  ํŒจํ‚ค์ง€์˜ ๋ฃจํŠธ์— ์žˆ์œผ๋ฉด (index.js ์˜†์—) "types" ํ”„๋กœํผํ‹ฐ๋ฅผ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ, ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜์กด์„ฑ (Dependencies)

๋ชจ๋“  ์˜์กด์„ฑ์€ npm์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ์ด ์žˆ๋Š” ๋ชจ๋“  ์„ ์–ธ ํŒจํ‚ค์ง€๊ฐ€ package.json์— "dependencies" ์„น์…˜ ์•ˆ์— ์•Œ๋งž๊ฒŒ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, Browserify์™€ TypeScript๋กœ ์ž‘์„ฑ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.

{
    "name": "browserify-typescript-extension",
    "author": "Vandelay Industries",
    "version": "1.0.0",
    "main": "./lib/main.js",
    "types": "./lib/main.d.ts",
    "dependencies": {
        "browserify": "latest",
        "@types/browserify": "latest",
        "typescript": "next"
    }
}

์—ฌ๊ธฐ์—์„œ, ํŒจํ‚ค์ง€๋Š” browserify์™€ typescript ํŒจํ‚ค์ง€์— ์˜์กด์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. browserify๋Š” ์„ ์–ธ ํŒŒ์ผ์ด npm ํŒจํ‚ค์ง€์— ํ•จ๊ป˜ ๋ฒˆ๋“ค๋ง ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, @types/browserify ์„ ์–ธ์„ ์˜์กด์„ฑ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— typescript๋Š” ์„ ์–ธ ํŒŒ์ผ์ด ํŒจํ‚ค์ง•๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ„๋„์˜ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํŒจํ‚ค์ง€๋Š” browserify์™€ typescript ํŒจํ‚ค์ง€์˜ ๊ฐ ์„ ์–ธ์„ ๋…ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์—, browserify-typescript-extension ํŒจํ‚ค์ง€๋Š” ์ด ์˜์กด์„ฑ๋“ค์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ด์œ ๋กœ, "devDependencies"๊ฐ€ ์•„๋‹ˆ๋ผ "dependencies"๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด "devDependencies"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ด ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ์— ๋‹จ์ง€ ๋ช…๋ น์ค„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ–ˆ๊ณ  ํŒจํ‚ค์ง€๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๊ธธ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, devDependencies๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ  ํ”Œ๋ž˜๊ทธ (Red flags)

/// <reference path="..." />

์„ ์–ธ ํŒŒ์ผ์— /// <reference path="..." />๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

/// <reference path="../typescript/lib/typescriptServices.d.ts" />
....

๋Œ€์‹  /// <reference types="..." />๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

/// <reference types="typescript" />
....

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์œ„ํ•ด ์˜์กด์„ฑ ์‚ฌ์šฉํ•˜๊ธฐ ์„น์…˜์„ ๋‹ค์‹œ ๋ณด์‹ญ์‹œ์˜ค.

์˜์กด์ ์ธ ์„ ์–ธ ํŒจํ‚ค์ง•ํ•˜๊ธฐ (Packaging dependent declarations)

๋งŒ์•ฝ ํƒ€์ž… ์ •์˜๊ฐ€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ์˜์กด์ ์ด๋ผ๋ฉด:

  • ๊ฐ ํŒŒ์ผ์€ ์œ ์ง€ํ•˜๊ณ  ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์™€ ํ•ฉ์น˜์ง€ ๋งˆ์„ธ์š”.
  • ๋˜ํ•œ ์ž‘์„ฑํ•œ ํŒจํ‚ค์ง€์— ์„ ์–ธ์„ ๋ณต์‚ฌํ•˜์ง€ ๋งˆ์„ธ์š”.
  • ๋งŒ์•ฝ npm ํƒ€์ž… ์„ ์–ธ ํŒจํ‚ค์ง€๊ฐ€ ์„ ์–ธ ํŒŒ์ผ์„ ํŒจํ‚ค์ง•ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ํ•ด๋‹น ํŒจํ‚ค์ง€์— ์˜์กดํ•˜์„ธ์š”.

@types์— ๋ฐฐํฌํ•˜๊ธฐ (Publish to @types)

@types์•ˆ์— ์žˆ๋Š” ํŒจํ‚ค์ง€๋“ค์€ ํƒ€์ž…-๋ฐฐํฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DefinitelyTyped์—์„œ ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ ์–ธ์„ @types ํŒจํ‚ค์ง€๋กœ ๋ฐฐํฌํ•˜๋ ค๋ฉด, https://github.com/DefinitelyTyped/DefinitelyTyped์— pull request๋ฅผ ์ œ์ถœํ•˜์„ธ์š”. ๊ธฐ์—ฌ ์ง€์นจ ํŽ˜์ด์ง€์—์„œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.