Skip to content

Instantly share code, notes, and snippets.

@hjsix2
Last active September 13, 2016 06:46
Show Gist options
  • Select an option

  • Save hjsix2/eb4ad67d2b8fd5c117bc33151d657e25 to your computer and use it in GitHub Desktop.

Select an option

Save hjsix2/eb4ad67d2b8fd5c117bc33151d657e25 to your computer and use it in GitHub Desktop.

NodeJS - Package.json

name

package.json์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ญ๋ณต์€ name๊ณผ version์ด๋‹ค. ํ•„์ˆ˜๋กœ ์ž…๋ ฅ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ด ํ•ญ๋ชฉ๋“ค์ด ๋น ์ง€๋ฉด ๋‹น์‹ ์˜ ํŒจํ‚ค์ง€๋Š” ์„ค์น˜ํ•  ์ˆ˜ ์—†๋‹ค. name๊ณผ version์„ ํ†ตํ•ด ๊ฐ ํŒจํ‚ค์ง€์˜ ๊ณ ์œ ์„ฑ์„ ํŒ๋ณ„ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํŒจํ‚ค์ง€์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด version์„ ๋ณ€๊ฒฝํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

๊ทœ์น™

  • ๋ฐ˜๋“œ์‹œ 214์ž๋ณด๋‹ค ์งง์•„์•ผ ํ•œ๋‹ค. ์ด๋Š” scoped package์˜ scope๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • ์ . ์ด๋‚˜ ๋ฐ‘์ค„ _๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋Œ€๋ฌธ์ž๋ฅผ ํฌํ•จํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.
  • URL์˜ ์ผ๋ถ€๋ถ„์ด์ž, ์ปค๋งจ๋“œ ๋ผ์ธ์˜ ์ธ์ˆ˜์ด๊ณ  ํด๋”๋ช…์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  URL-safe ํ•˜์ง€ ์•Š์€ name์€ ๊ฑฐ๋ถ€๋œ๋‹ค.

์กฐ์–ธ

  • Node์˜ ์ฝ”์–ด ๋ชจ๋“ˆ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • name์— node ๋˜๋Š” js๋ฅผ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค. package.json์„ ์“ฐ๊ณ  ์žˆ๋Š” ์‹œ์ ์—์„œ ์ด๋ฏธ JavaScript๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๊ณ  engines ํ•ญ๋ชฉ์—์„œ ์‹คํ–‰๊ธฐ๋ฐ˜(engine)์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • name์€ JavaScript ํŒŒ์ผ ๋‚ด์—์„œ require() ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์งง๊ฒŒ ํ•˜๋ฉด์„œ๋„ ์•Œ๊ธฐ ์‰ฌ์šด ๊ฒƒ์œผ๋กœ ์ง“๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์„ค์ • ์ „์— ๊ฐ™์€ ์ด๋ฆ„์ด ์ด๋ฏธ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด npm registry

name์€ scope์— ์˜ํ•ด ์ ‘๋‘์–ด๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด @hjsix2/mypackage์™€ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

version

version์€ ๋ฐ˜๋“œ์‹œ npm์˜ ๋””ํŽœ๋˜์‹œ์— ํฌํ•จ๋œ node-semver๋กœ parsing ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. version number์™€ range์— ๋Œ€ํ•œ ๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” semveํ•ญ๋ชฉ์„ ์ฐธ๊ณ  ํ•œ๋‹ค.

description

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

keywords

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

homepage

ํ”„๋กœ์ ํŠธ ํ™ˆํŽ˜์ด์ง€๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ด ํ•ญ๋ชฉ์— ์ž…๋ ฅํ•œ๋‹ค. ์ฃผ์˜: ์ด๊ฒƒ์€ 'url'ํ•ญ๋ชฉ๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค. ๋งŒ์•ฝ url์„ ์„ค์ •ํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ์™ธ๋ถ€์— ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ์†Œ์Šค๋กœ ๋ฆฌ๋‹ค์•„๋ ‰์…˜ ๋˜๊ณ , ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์›€์ง์ž„์„ ์œ ๋ฐœํ•œ๋‹ค.

bugs

ํ”„๋กœ์ ํŠธ์˜ ์ด์Šˆ์™€ ๋ฒ„๊ทธ ํŠธ๋ž˜ํ‚น์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” url๊ณผ ์ด์Šˆ๋ฅผ ์•Œ๋ฆด email ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. ์ด ํ•ญ๋ชฉ๋“ค์€ ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์„ ๋•Œ ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•จ์ด๋‹ค.

"bugs": {
    "url": "http://github.com/owner/project/issues",
    "email": "project@hostname.com"
}

url์ด๋‚˜ email ์ค‘ ํ•˜๋‚˜๋งŒ ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๊ณ , url ๋งŒ ์ง€์ •ํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด์„ bugs ํ•ญ๋ชฉ์— ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. url์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” npm bugs ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

license

ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ž๋“ค์ด ๋‹น์‹ ์ด ๋งŒ๋“  ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ๊ถŒํ•œ์„ ์–ป๋Š”์ง€, ๋˜ ์–ด๋–ค ๊ธˆ๊ธฐ ์‚ฌํ•ญ์ด ์žˆ๋Š”์ง€ ์•Œ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด์„ผ์Šค๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ BSD-3-Clause ๋‚˜ MIT ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ผ์ด์„ผ์Šค์˜ ํ‘œ์ค€ SPDX ID๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

"license": "BSD-3-Clause"

https://spdx.org/licenses/ ์—์„œ SPDX ๋ผ์ด์„ผ์Šค ์•„์ด๋”” ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. OSI ์—์„œ ์Šน์ธํ•œ ๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด๋‹ค.

๋งŒ์•ฝ ํŒจํ‚ค์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ผ์ด์„ผ์Šค ์•„๋ž˜์— ์žˆ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด SPDX license expression syntax version 2.0 string ์„ ์‚ฌ์šฉํ•ด์„œ ํ‘œํ˜„ํ•œ๋‹ค.

"license" : "(ISC OR GPL-3.0)"

๋งŒ์•ฝ SPDX ์‹๋ณ„์ž๋กœ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๋ผ์ด์„ผ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด SPDX ํ‘œํ˜„์„ ๋”ฐ๋ผ ํ•ด๋‹น ๋ผ์ด์„ผ์Šค๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค.

"license" : "SEE LICENSE IN <filename>"

<filename> ์— ๋ช…์‹œ๋œ ํŒŒ์ผ์€ ํŒจํ‚ค์ง€์˜ ํ†ฑ๋ ˆ๋ฒจ์— ํฌํ•จ์‹œํ‚จ๋‹ค.

์˜ค๋ž˜๋œ ํŒจํ‚ค์ง€ ์ค‘ ์ผ๋ถ€๋Š” licenses ๋ผ๋Š” ์†์„ฑ์œผ๋กœ ๋ผ์ด์„ผ์Šค๋“ค์˜ ๋ชฉ๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ์ด ๋ฐฉ์‹์€ ํ˜„์žฌ deprecated ๋˜์—ˆ๋‹ค.

// ์•„๋ž˜์˜ ๋ฐฉ์‹์€ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
"license" : {
    "type" : "ISC",
    "url" : "http://opensource.org/licenses/ISC"
}


// ์•„๋ž˜์˜ ๋ฐฉ์‹์€ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
"licenses" : [{
    "type": "MIT",
    "url": "http://www.opensource.org/licenses/mit-license.php"
},
{
    "type": "Apache-2.0",
    "url": "http://opensource.org/licenses/apache2.0.php"
}]

๋Œ€์‹ ์— SPDX ํ‘œํ˜„์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

"license": "ISC"

"license": "(MIT OR Apache-2.0)"

๋งˆ์ง€๋ง‰์œผ๋กœ ๋น„๊ณต๊ฐœ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์–ด๋–ค ์กฐ๊ฑด์—์„œ๋„ ํŒจํ‚ค์ง€๋ฅผ ํผ๋ธ”๋ฆฌ์‹ฑํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…์‹œํ•ด์ค€๋‹ค.

"license": "UNLICENSED"

์ด๋Ÿฐ ๊ฒฝ์šฐ, "private": true ๋กœ ์„ค์ •ํ•จ์œผ๋กœ์จ ๋ฏธ์—ฐ์— ํผ๋ธ”๋ฆฌ์‹ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

people fields: author, contributors

author ๋Š” ํ•œ ์‚ฌ๋žŒ๋งŒ์„ ์ง€์ •ํ•˜๊ณ , contributors ๋Š” ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์„ ๋ฐฐ์—ด๋กœ ์ง€์ •ํ•œ๋‹ค. ๊ฐ ์‚ฌ๋žŒ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•„์ˆ˜์ ์œผ๋กœ name์„ ํฌํ•จํ•˜๊ณ  ์„ ํƒ์ ์œผ๋กœ email ๊ณผ url ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

"author": {
    "name" : "Barney Rubble",
    "email" : "b@rubble.com",
    "url" : "http://barnyrubble.tumblr.com/"
}

๋˜๋Š” ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ง์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์ค„์—ฌ์„œ ์ž…๋ ฅํ•˜๋ฉด npm์ด ์ด๋ฅผ ํŒŒ์‹ฑํ•˜๊ฒŒ ๋œ๋‹ค.

"author": "Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"

npm์€ ๋˜ํ•œ maintainers ๋ผ๋Š” ํ•„๋“œ์— ๋‹น์‹ ์˜ npm ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์„ค์ •ํ•œ๋‹ค.

files

files ํ•ญ๋ชฉ์€ ํ”„๋กœ์ ํŠธ์— ํฌํ•จ๋œ ํŒŒ์ผ์˜ ๋ฐฐ์—ด์ด๋‹ค. ํด๋” ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด ํด๋” ์•ˆ์˜ ํŒŒ์ผ๋„ ํฌํ•จ๋œ๋‹ค. (๋ฌผ๋ก , ๋‹ค๋ฅธ ์„ค์ •์•  ์˜ํ•ด ํ•ด๋‹น ํŒŒ์ผ๋“ค์ด ๋ฌด์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ)

๋˜ํ•œ .npmignore ๋ผ๋Š” ํŒŒ์ผ์„ ํŒจํ‚ค์ง€์˜ ๋ฃจํŠธ ํ˜น์€ ํ•˜์œ„ ํด๋”์— ๋‘˜ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ํŒŒ์ผ์— ๊ธฐ๋ก๋œ ํŒŒ์ผ๋“ค์€ "files"์˜ ๋ฐฐ์—ด๋กœ ์ง€์ •๋˜์–ด ์žˆ์—ˆ๋‹ค๊ณ  ํ•ด๋„ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋œ๋‹ค. .npmignore ํŒŒ์ผ์€ .gitignore ํŒŒ์ผ๊ณผ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

๋‹ค์Œ์˜ ํŒŒ์ผ๋“ค์€ ์„ค์ •์— ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ํฌํ•จ๋œ๋‹ค.

  • package.json
  • README
  • CHANGELOG
  • LICENSE ๋˜๋Š” LICENCE

๋ฐ˜๋Œ€๋กœ, ์ผ๋ถ€ ํŒŒ์ผ๋“ค์€ ํ•ญ์ƒ ๋ฌด์‹œ๋œ๋‹ค.

  • .git
  • CVS
  • .svn
  • .hg
  • .lock-wscript
  • .wafpickle-N
  • *.swp
  • .DS_Store
  • ._*
  • npm-debug.log

main

main ํ•ญ๋ชฉ์€ ๋‹น์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘์ ์ด ๋˜๋Š” ๋ชจ๋“ˆ์˜ ID ์ด๋‹ค. ์ฆ‰, 'foo' ๋ผ๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด ํŒจํ‚ค์ง€์„ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์น˜ ํ•œ ๋’ค, require("foo") ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ main์œผ๋กœ ์ง€์ •ํ•œ ๋ชจ๋“ˆ์˜ exports ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

๋ชจ๋“ˆ ID๋Š” ํŒจํ‚ค์ง€ ๋ฃจํŠธ์— ์ƒ๋Œ€์ ์ธ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋“ˆ์— ์žˆ์–ด์„œ ๋ฉ”์ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์œ ์šฉํ•˜์ง€๋งŒ ์ข…์ข… ๊ทธ๋ ‡์ง€ ์•Š์„์ˆ˜๋„ ์žˆ๋‹ค.

bin

๋งŽ์€ ํŒจํ‚ค์ง€๋Š” PATH์— ์„ค์น˜๋˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์‹คํ–‰ ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. npm์—์„œ๋Š” ์ด๋ฅผ ๋งค์šฐ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. (์‹ค์ œ๋กœ ์ด ๊ธฐ๋Šฅ์€ npm์„ ์„ค์น˜ํ•˜๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.)

์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„  package.json ํŒŒ์ผ์— bin ํ•ญ๋ชฉ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹œ์—, npm ์€ bin ํ•ญ๋ชฉ์— ๊ธฐ์ˆ ๋œ ํŒŒ์ผ์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ global install์ธ ๊ฒฝ์šฐ prefix/bin ์—, local install์ธ ๊ฒฝ์šฐ ./node_modules/.bin/ ์— ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, myapp์€ ์•„๋ž˜์™€ ๊ฐ™์ด bin ํ•ญ๋ชฉ์ด ์ง€์ •๋˜์–ด ์žˆ๋‹ค.

"bin": { "myapp": "./cli.js" }

๊ทธ๋ž˜์„œ myapp์„ ์„ค์น˜ํ•  ๋•Œ, cli.js ํŒŒ์ผ์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ /usr/local/bin/myapp ์— ๋งŒ๋“ค์–ด์ง„๋‹ค.

๋งŒ์•ฝ, ํ•˜๋‚˜์˜ ์‹คํ–‰ ํŒŒ์ผ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ์‹คํ–‰ ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„๊ณผ ๊ฐ™๊ฒŒ ๋˜๊ณ , ๊ทธ๋ ‡๊ฒŒ ์•Š๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ๊ฐ์˜ ์‹คํ–‰ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ bin ํ•ญ๋ชฉ์— ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

"name": "my-program",
"version": "1.2.5",
"bin": {
    "my-program": "./path/to/program"
}

directories

CommonJS Packages ์ŠคํŽ™์—๋Š” directories ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. npm์˜ package.json ์„ ๋ณด๋ฉด doc, lib์™€ man ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฏธ๋ž˜์—๋Š”, ์ด๋Ÿฌํ•œ ์ •๋ณด๊ฐ€ ๋” ์ฐฝ์˜์ ์ธ ๋ชฉ์ ์œผ๋กœ ์ด์šฉ๋ ์ง€๋„ ๋ชจ๋ฅธ๋‹ค.

directories.lib

๋ชจ๋“ˆ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค. lib ํด๋”์— ํŠน๋ณ„ํ•œ ์ผ์„ ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋กœ ์œ ์šฉํ•˜๋‹ค.

directories.bin

๋งŒ์•ฝ directories.bin ๋กœ bin ์„ ์ง€์ •ํ•˜๋ฉด, ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์ด ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค. bin ์ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์— ์˜ํ•ด, bin ๊ณผ directories.bin ์„ ๋ชจ๋‘ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜์ด๋‹ค. ๊ฐœ๊ฐœ์˜ ํŒŒ์ผ์„ ์ง€์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด bin์„ ํŠน์ • ํด๋” ์•„๋ž˜์˜ ๋ชจ๋“  ํŒŒ์ผ์„ bin ์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด directories.bin์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

directories.man

man ๋ฌธ์„œ๋“ค์ด ์œ„์น˜ํ•œ ํด๋”๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. "man" ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๋‹ค.

directories.doc

๋งˆํฌ๋‹ค์šด ํŒŒ์ผ๋“ค์„ ์—ฌ๊ธฐ์— ์œ„์น˜์‹œํ‚จ๋‹ค. ์–ธ์  ๊ฐ€๋Š” ์ด ํŒŒ์ผ๋“ค์ด ๋ฉ‹์ง€๊ฒŒ ํ‘œ์‹œ๋  ๊ฒƒ์ด๋‹ค.

directories.example

์˜ˆ์ œ ํŒŒ์ผ๋“ค์„ ์—ฌ๊ธฐ์— ์œ„์น˜์‹œํ‚จ๋‹ค. ์–ธ์  ๊ฐ€๋Š” ์ด ํŒŒ์ผ๋“ค์ด ๋ฉ‹์ง€๊ฒŒ ํ‘œ์‹œ๋  ๊ฒƒ์ด๋‹ค.

repository

์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ์ €์žฅ์†Œ ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์— ์ฐธ์—ฌํ•˜๊ณ ์žํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ git ์ €์žฅ์†Œ๊ฐ€ github ์ด๋ผ๋ฉด npm docs ๋ช…๋ น์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

"repository": {
    "type": "git",
    "url": "http://github.com/npm/npm.git"
}

"repository": {
    "type": "svn",
    "url": "http://v8.googlecode.com/svn/trunk/"
}

URL์€ ํŠน๋ณ„ํ•œ ์กฐ์ž‘์—†์ด VCS ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ”๋กœ ๋‹ค๋ค„์งˆ ์ˆ˜ ์žˆ๋„๋ก ์˜คํ”ˆ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ปดํ“จํ„ฐ๋ฅผ ์œ„ํ•œ ๋ถ€๋ถ„์ด๋ฏ€๋กœ, ํ”„๋กœ์ ํŠธ์˜ ํ™ˆํŽ˜์ด์ง€ URL์„ ๋ช…์‹œํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

scripts

script ํ•ญ๋ชฉ์€ ํŒจํ‚ค์ง€์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์ค‘ ๋‹ค์–‘ํ•œ ํƒ€์ด๋ฐ์—์„œ ์‹คํ–‰๋˜๋Š” script ๋ช…๋ น๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์ „์ด๋‹ค. scripts ํ•ญ๋ชฉ ๊ฐ์ฒด์—์„œ ํ‚ค๋Š” ์ด๋ฒคํŠธ์ด๊ณ , ๊ฐ’์€ ์ด๋•Œ ์‹คํ–‰๋  ์ปค๋งจ๋“œ์ด๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ npm-scripts (https://docs.npmjs.com/misc/scripts) ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

config

config ๊ฐ์ฒด๋Š” ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „์— ๊ด€๊ณ„์—†์ด ํŒจํ‚ค์ง€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์„ค์ • ์ •๋ณด์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒจํ‚ค์ง€์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด,

"name": "foo",
"config": {
    "port": "8080"
}

start ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ npm_package_config_port ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฅผ ๋ฎ์–ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

npm config set foo:port 8001

์ž์„ธํ•œ ๋‚ด์šฉ์€ npm-config ๋ฐ npm-scripts ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค

dependencies

์˜์กด์„ฑ์„ ๊ทœ์ •ํ•˜๋Š” ๊ฒƒ์€ ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„๊ณผ ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค. ๋ฒ„์ „ ๋ฒ”์œ„๋Š” ํ•˜๋‚˜ ํ˜น์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์„ค๋ช…์ž ๋ฌธ์ž์—ด์ด๋‹ค. ์˜์กด์„ฑ์€ tarball ์ด๋‚˜ git URL๋กœ๋„ ์ง€์ •๋  ์ˆ˜ ์žˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ด€๋ จ ๋ชจ๋“ˆ์ด๋‚˜ ํŠธ๋žœ์Šค ํŒŒ์ผ๋Ÿฌ ๊ด€๋ จ ๋ชจ๋“ˆ์„ dependencies ๊ฐœ์ฒด์— ์ถ”๊ฐ€ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์šด์˜์ด ์•„๋‹Œ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋งŒ ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋ชจ๋“ˆ๋“ค์€ devDependencies ์— ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. ์ž์„ธํ•œ ๊ฒƒ์€ devDependencies ํ•ญ๋ชฉ์„ ์ฐธ๊ณ ํ•˜์ž.

semver ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋ฒ„์ „ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • version : ๋ช…์‹œํ•œ version ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.
  • version : ๋ช…์‹œํ•œ version ๋ณด๋‹ค ๋†’์•„์•ผ ํ•œ๋‹ค.

  • =version

  • <version
  • <=version
  • ~version : ๋ช…์‹œํ•œ version ๊ณผ ๊ทผ์‚ฌํ•œ ๋ฒ„์ „. ์ž์„ธํ•œ ๋‚ด์šฉ์€ semver ์ฐธ์กฐ.
  • ^version : ๋ช…์‹œํ•œ version ๊ณผ ํ˜ธํ™˜๋˜๋Š” ๊ฒƒ. ์ž์„ธํ•œ ๋‚ด์šฉ์€ semver ์ฐธ์กฐ.
  • 1.2.x : 1.2.0, 1.2.1, ๋“ฑ๋“ฑ. 1.3.0์€ ์ œ์™ธ
  • http://... : ์•„๋ž˜์˜ URLs as Dependencies ํ•ญ๋ชฉ ์ฐธ์กฐ.
    • : ๋ชจ๋“  ๋ฒ„์ „
  • "" : * ์™€ ๊ฐ™์Œ
  • version1 - version2 : >= version1 <= version2 ๊ณผ ๊ฐ™์Œ.
  • range1 || range2 : range1 ๋˜๋Š” range2
  • git... : ํ•˜๋‹จ์˜ Git URLs as Dependencies ํ•ญ๋ชฉ ์ฐธ์กฐ.
  • user/repo : ํ•˜๋‹จ์˜ GitHub URLs ํ•ญ๋ชฉ ์ฐธ์กฐ.
  • tag : tag๊ฐ€ ์ง€์ •๋˜์–ด publish ๋œ ํŠน์ • ๋ฒ„์ „. ์ž์„ธํ•œ ๋‚ด์šฉ์€ npm-tag ํ•ญ๋ชฉ ์ฐธ์กฐ.
  • path/path/path : ํ•˜๋‹จ์˜ Local Paths ํ•ญ๋ชฉ ์ฐธ์กฐ.
"dependencies": {
    "foo": "1.0.0 - 2.9999.9999",
    "bar": ">=1.0.2 <2.1.2",
    "baz": ">1.0.2 <=2.3.4",
    "boo": "2.0.1",
    "qux": "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0",
    "asd": "http://asdf.com/asdf.tar.gz",
    "til": "~1.2",
    "elf": "~1.2.3",
    "two": "2.x",
    "thr": "3.3.x",
    "lat": "latest",
    "dyl": "file:../dyl"
}

URLs as Dependencies

tarball์˜ url์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ง€์ •๋œ tarball์€ ํŒจํ‚ค์ง€ ์„ค์น˜์‹œ์— ๋‹ค์šด๋กœ๋“œ๋˜๊ณ  ์„ค์น˜๋œ๋‹ค.

Git URLs as Dependencies

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์˜ Git url์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

git://github.com/user/project.git#commit-ish git+ssh:// user @ hostname:project.git # commit-ish git+ssh://user@hostname/project.git#commit-ish git+http://user@hostname/project/blah.git#commit-ish git+https://user@hostname/project/blah.git#commit-ish

commit-ish ๋Š” tag๋‚˜ sha ๋˜๋Š” branch ๋“ฑ git checkout ์˜ ์ธ์ž๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฐ’๋“ค๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ master ์ด๋‹ค.

GitHub URLs

npm ๋ฒ„์ „ 1.1.65 ๋ถ€ํ„ฐ GitHub url์„ "foo": "user/foo-project" ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.๋˜ commit-ish suffix ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

"name": "foo",
"version": "0.0.0",
"dependencies": {
    "express": "visionmedia/express",
    "mocha": "visionmedia/mocha#4727d357ea"
}

Local Paths

npm ๋ฒ„์ „ 2.0.0๋ถ€ํ„ฐ ๋กœ์ปฌ ๊ฒฝ๋กœ๋ฅผ ํŒจํ‚ค์ง€์— ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋กœ์ปฌ ๊ฒฝ๋กœ๋Š” npm install -S ๋‚˜ npm install --save ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

../foo/bar ~/foo/bar ./foo/bar /foo/bar

์ด ๊ฒฝ์šฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ •๊ทœํ™”ํ•ด์„œ package.json ์— ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.

"name": "baz",
"dependencies": {
    "bar": "file:../foo/bar"
}

์ด ๊ธฐ๋Šฅ์€ ๋กœ์ปฌ ์˜คํ”„๋ผ์ธ ๊ฐœ๋ฐœ์šฉ์œผ๋กœ ์œ ์šฉํ•˜๊ณ  ์™ธ๋ถ€ ์„œ๋ฒ„์— ๋‹ฟ์ง€ ์•Š๊ณ  npm installing์„ ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•˜์ง€๋งŒ, public registry ์— ์˜ฌ๋ฆด ๋•Œ์—๋Š” ์ ˆ๋Œ€ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

devDependencies

ํŒจํ‚ค์ง€ ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด, ํŒจํ‚ค์ง€ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฌธ์„œ ์ž‘์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ์™ธ๋ถ€ ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ์•„๋งˆ๋„ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ devDependencies ๊ฐ์ฒด์— ๋””ํŽœ๋˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

CoffeeScript์™€ ๊ฐ™์ด JavaScript๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”Œ๋žซํผ ํŠน์œ ์˜ ์ „๋‹จ๊ณ„๊ฐ€ ์žˆ์„ ๋•Œ, devDependency ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

"name": "ethopia-waza",
"description": "a delightfully fruity coffee varietal",
"version": "1.2.3",
"devDependencies": {
    "coffee-script": "~1.6.3"
},
"scripts": {
    "prepublish": "coffee -o lib/ -c src/waza.coffee"
},
"main": "lib/waza.js"

prepublish ์Šคํฌ๋ฆฝํŠธ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด JavaScript๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํผ๋ธ”๋ฆฌ์‹ฑ์„ ํ•˜๊ธฐ์ „์— ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค.

peerDependencies

๋‹น์‹ ์ด ๋งŒ๋“  ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ์ง์ ‘ require๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๊ทธ ํ˜ธ์ŠคํŠธ ํŒจํ‚ค์ง€์™€ ํ˜ธํ™˜์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ์„ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค. ํŠนํžˆ ๋‹น์‹ ์˜ ๋ชจ๋“ˆ์€ ํ˜ธ์ŠคํŠธ ํŒจํ‚ค์ง€์˜ ๋ฌธ์„œ์— ์˜ํ•ด ์ง€์ •๋˜๊ฑฐ๋‚˜ ์˜ˆ์ธก๋˜๋Š” ํŠน์ •ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค.

์˜ˆ๋ฅผ๋“ค๋ฉด,

"name": "tea-latte",
"version": "1.3.5",
"peerDependencies": {
    "tea": "2.x"
}

์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ๋‹น์‹ ์˜ ํŒจํ‚ค์ง€์ธ tea-latte ๋Š” tea ๋ผ๋Š” ํ˜ธ์ŠคํŠธ ํŒจํ‚ค์ง€์˜ 2.x ๋ฒ„์ „๋Œ€์™€ ํ•จ๊ป˜ ์„ค์น˜๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค. npm install tea-latte ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ์ถœ๋ ฅํ•  ๊ฒƒ์ด๋‹ค.

โ”œโ”€โ”€ tea-latte@1.3.5
โ””โ”€โ”€ tea@2.2.0

์ฃผ์˜ํ•  ์ 

npm ๋ฒ„์ „ 1 ๊ณผ 2์—์„œ๋Š” dependency tree์—์„œ ๋”๋†’์€ ๋ฒ„์ „์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉด, ์ž๋™์œผ๋กœ peerDependencies ๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ ๋ฉ”์ด์ € ๋ฒ„์ „์˜ npm(npm@3)์—์„œ๋Š” ๋”์ด์ƒ ์ด ์ผ€์ด์Šค์—์„œ peerDependencies ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  peerDependency๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ฃผ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. npm 1๊ณผ 2์—์„œ์˜ ์ด๋Ÿฐ ๋™์ž‘์€ ์ž์ฃผ ์˜คํ•ด๋ฅผ ์ผ์œผ์ผฐ๊ณ , ๊ฐ€๋Šฅํ•œํ•œ npm์ด ํ”ผํ•˜๋„๋ก ๋””์ž์ธํ•œ ์ƒํ™ฉ์ธ, ๋””ํŽœ๋˜์‹œ ์ง€์˜ฅ์„ ๋งŒ๋“ค์—ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ์ด ์ถฉ๋Œํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฐ ์ด์œ ๋กœ, ๋‹น์‹ ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์š”๊ตฌ์‚ฌํ•ญ์€ ๊ฐ€๋Šฅํ•œ ๋„“์–ด์•ผํ•˜๊ณ  ํŠน์ • ํŒจ์น˜ ๋ฒ„์ „๋“ค๊ณผ ๋ฌถ์—ฌ์„  ์•ˆ๋œ๋‹ค.

ํ˜ธ์ŠคํŠธ๊ฐ€ semver์˜ ๋ฒ„์ „ ํ‘œํ˜„ ๋ฐฉ์‹๊ณผ ํ˜ธํ™˜์„ฑ์„ ๊ฐ–๋Š”๋‹ค๊ณ  ํ•˜๋ฉด, ํ˜ธ์ŠคํŠธ์˜ ๋ฉ”์ด์ € ๋ฒ„์ „์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋™์ž‘๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ˜ธ์ŠคํŠธ ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  1.x ๋ฒ„์ „๊ณผ ๋™์ž‘ํ•œ๋‹ค๋ฉด, "^1.0" ๋˜๋Š” "1.x" ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋งŒ์•ฝ 1.5.2 ๋ฒ„์ „ ์ดํ›„์— ์†Œ๊ฐœ๋œ ๊ธฐ๋Šฅ์— ์˜์กด์„ฑ์ด ์žˆ๋‹ค๋ฉด, ">=1.5.2 <2" ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

bundledDependencies

ํŒจํ‚ค์ง€๋ฅผ ํผ๋ธ”๋ฆฌ์‹ฑํ•  ๋•Œ ๋ฒˆ๋“ค๋˜๋Š” ํŒจํ‚ค์ง€ ์ด๋ฆ„๋“ค์˜ ๋ชฉ๋ก

optionalDependencies

์‚ฌ์šฉ์„ ์›ํ•˜๋Š” ๋ชจ๋“ˆ์ด์ง€๋งŒ, ์—†๊ฑฐ๋‚˜ ์„ค์น˜๊ฐ€ ์‹คํŒจํ•ด๋„ npm์˜ ํŒจํ‚ค์ง€ ์„ค์น˜ ๊ณผ์ •์ด ์ค‘๋‹จ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด, optionalDependencies ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฒ„์ „์„ ํฌํ•จํ•œ ํŒจํ‚ค์ง€ ์ด๋ฆ„ ํ˜น์€ url์„ dependencies ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์žฌํ•œ๋‹ค. ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•ด๋„ ์„ค์น˜๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ์ด์–ด์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜์กด์„ฑ ๋ชจ๋“ˆ์ด ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€์‘ํ•˜๋„๋ก ๊ฐœ๋ฐœํ–ˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

try {
    var foo = require('foo')
    var fooVersion = require('foo/package.json').version
} catch (er) {
    foo = null
}
if ( notGoodFooVersion(fooVersion) ) {
    foo = null
}

// .. then later in your program ..

if (foo) {
    foo.doFooThings()
}

optionalDependencies ์— ์žˆ๋Š” ํŒจํ‚ค์ง€๋“ค์€ dependencies ์— ๊ฐ™์€ ์ด๋ฆ„์ด ์žˆ์œผ๋ฉด ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜๋ฏ€๋กœ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํ•œ์ชฝ์—๋งŒ ๊ธฐ์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

engines

๋™์ž‘ ๊ฐ€๋Šฅํ•œ node์˜ ๋ฒ„์ „์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

"engines" : { "node" : ">=0.10.3 <0.12" }

์ฃผ์˜ํ•  ์ ์€, ์‚ฌ์šฉ์ž๊ฐ€ engine-strict config flag ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ํ•„๋“œ๋Š” ๋‹จ์ง€ ์กฐ์–ธ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.

engineStrict

์ด ๊ธฐ๋Šฅ์€ npm 3.0.0 ๋ฒ„์ „๋ถ€ํ„ฐ deprecated ๋˜์—ˆ๋‹ค. npm 3.0.0 ์ด์ „์— ์ด ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ engine-strict ๋ฅผ ์„ค์ •ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ๋‹ค๋ฃจ์–ด์ง€๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค.

os

๋‹น์‹ ์˜ ๋ชจ๋“ˆ์ด ์–ด๋–ค ์šด์˜์ฒด์ œ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ๋Š” OSX์™€ ๋ฆฌ๋ˆ…์Šค์—์„œ ๋™์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

"os" : ["darwin", "linux"]

ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹ ๋Œ€์‹ ์— ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋‹จ์ˆœํžˆ OS ์•ž์— '!' ๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.

"os" : ["!win32"]

์šด์˜์ฒด์ œ์˜ ๋ฌธ์ž์—ด์€ process.platform ์— ์˜ํ•ด์„œ ๊ฒฐ์ •๋œ๋‹ค. ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์™€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์„ ๋‘˜๋‹ค ๋™์‹œ์— ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผํ•  ๊นŒ๋‹ญ์ด ๋ณ„๋กœ ์—†์„ ๊ฒƒ์ด๋‹ค.

cpu

๋งŒ์•ฝ ๋‹น์‹ ์˜ ์ฝ”๋“œ๊ฐ€ ํŠน์ •ํ•œ CPU ์•„ํ‚คํ…์ณ์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์—ญ์‹œ ๋ช…์‹œํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

"cpu" : ["x64", "ia32"]

OS ์„ค์ •๊ณผ ๊ฐ™์ด ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ์ง€์ •ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

"cpu" : ["!arm", "!mips"]

ํ˜ธ์ŠคํŠธ ์•„ํ‚คํ…์ณ๋Š” process.arch ์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค.

preferGlobal

ํŒจํ‚ค์ง€๊ฐ€ ๊ธ€๋กœ๋ฒŒ ์„ค์น˜(-g ์˜ต์…˜์„ ๋ถ™์—ฌ ์„ค์น˜)๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ๋งŒ ํ•œ๋‹ค๋ฉด, ์ด ๊ฐ’์„ true๋กœ ํ•ด์„œ local ์„ค์น˜์‹œ์— ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ local ์„ค์น˜๋ฅผ ์™„์ „ํžˆ ๋ง‰์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ, ํŒจํ‚ค์ง€๊ฐ€ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ํ˜ผ๋ž€์„ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค.

private

๋งŒ์•ฝ "private": true ๋กœ package.json ์— ์„ค์ • ํ•ด๋‘๋ฉด, publish ๋ช…๋ น์„ ๊ฑฐ๋ถ€ํ•˜๊ฒŒ ๋œ๋‹ค.

์ด ํ”Œ๋ž˜๊ทธ๋Š” ๊ฐœ์ธ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ €์žฅ์†Œ๋ฅผ ๋ฌด์‹ฌ์ฝ” publish ํ•ด ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ๋งŒ์•ฝ (๋‚ด๋ถ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“ฑ) ํŠน์ • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋งŒ์— ์ถœ์‹œํ•˜๋Š” ํ™˜๊ฒฝ์„ ์›ํ•œ๋‹ค๋ฉด, ์•„๋ž˜์˜ publishConfig ๋ฅผ ์ด์šฉํ•˜์—ฌ publish์‹œ registry ์„ค์ •์„ ๋ฎ์–ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

publishConfig

publish ํ• ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์„ค์ •์ด๋‹ค. tag ์™€ registry, access ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ํŽธ๋ฆฌํ•œ๋ฐ, ์ด๊ฒƒ๋“ค์„ ์„ค์ •ํ•ด์„œ ํŒจํ‚ค์ง€๊ฐ€ "lastest"๋กœ ํƒœ๊ทธ๋˜๊ฑฐ๋‚˜, public registry ์— publish ๋˜์ง€ ์•Š๋„๋ก ๋˜ scoped module์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ private ๋กœ ํ•ด์ฃผ๋Š” ๊ฒƒ ๋“ฑ์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์„ค์ • ํ•ญ๋ชฉ ๊ฐ’์€ ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜์ง€๋งŒ, ์˜ค์ง "tag"์™€ "registry", "access" ๋งŒ publish ์˜ ๋ชฉ์ ์—์„œ ๋‹ค๋ค„์ง€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๋ฎ์–ด ์“ธ ์ˆ˜์žˆ๋Š” config ์˜ต์…˜์€ npm-config ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

DEFAULT VALUES

npm์€ ํŒจํ‚ค์ง€ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

"scripts": {"start": "node server.js"}

๋งŒ์•ฝ server.js ํŒŒ์ผ์ด ํŒจํ‚ค์ง€์˜ ๋ฃจํŠธ์— ์กด์žฌํ•˜๋ฉด, npm ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ start ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, node server.js ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

"scripts":{"preinstall": "node-gyp rebuild"}

๋งŒ์•ฝ binding.gyp ํŒŒ์ผ์ด ํŒจํ‚ค์ง€์˜ ๋ฃจํŠธ์— ์กด์žฌํ•˜๋ฉด, npm ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ preinstall ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ node-gyp ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปดํŒŒ์ผํ•œ๋‹ค.

"contributors": [...]

๋งŒ์•ฝ AUTHORSํŒŒ์ผ์ด ํŒจํ‚ค์ง€ ๋ฃจํŠธ์— ์žˆ์œผ๋ฉด, npm์€ ๊ฐ ๋ผ์ธ์„ name <email> (url) ํฌ๋ฉง์œผ๋กœ ๋‹ค๋ฃจ๊ฒŒ ๋œ๋‹ค. email๊ณผ url์€ ํ•„์ˆ˜๊ฐ’์ด ์•„๋‹ˆ๋‹ค. # ๋˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ์‹œ์ž‘๋˜๋Š” ์ค„์€ ๋ฌด์‹œํ•˜๊ฒŒ ๋œ๋‹ค.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment