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์ ๋ฐ๋์ npm์ ๋ํ๋์์ ํฌํจ๋ node-semver๋ก parsing ๊ฐ๋ฅํด์ผ ํ๋ค. version number์ range์ ๋ํ ๋ ์์ธํ ์ ๋ณด๋ semveํญ๋ชฉ์ ์ฐธ๊ณ ํ๋ค.
์ค๋ช ์ ๋ฌธ์์ด๋ก ๊ธฐ์ ํ๋ค. npm search๋ก ๊ฒ์๋ ๋ฆฌ์คํธ์ ํ์๋๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด ๋น์ ์ด ๋ง๋ ํจํค์ง๋ฅผ ์ฐพ์ ๋ด๊ณ ์ดํดํ๋๋ฐ ๋์์ด ๋๋ค.
ํค์๋๋ฅผ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ์ค๋ช ํ๋ค. npm search๋ก ๊ฒ์๋ ๋ฆฌ์คํธ์ ํ์๋๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด ๋น์ ์ด ๋ง๋ ํจํค์ง๋ฅผ ์ฐพ์ ๋ด๊ณ ์ดํดํ๋๋ฐ ๋์์ด ๋๋ค.
ํ๋ก์ ํธ ํํ์ด์ง๊ฐ ์์ ๊ฒฝ์ฐ ์ด ํญ๋ชฉ์ ์
๋ ฅํ๋ค.
์ฃผ์: ์ด๊ฒ์ 'url'ํญ๋ชฉ๊ณผ๋ ๋ค๋ฅด๋ค. ๋ง์ฝ url์ ์ค์ ํ๋ฉด ๊ทธ๊ฒ์ ์ธ๋ถ์ ์ค์น๋ ํจํค์ง ์์ค๋ก ๋ฆฌ๋ค์๋ ์
๋๊ณ , ์์์น ๋ชปํ ์์ง์์ ์ ๋ฐํ๋ค.
ํ๋ก์ ํธ์ ์ด์์ ๋ฒ๊ทธ ํธ๋ํน์ ๋ณผ ์ ์๋ url๊ณผ ์ด์๋ฅผ ์๋ฆด email ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ค. ์ด ํญ๋ชฉ๋ค์ ํจํค์ง ์ฌ์ฉ์๊ฐ ๋ฌธ์ ์ ์ง๋ฉดํ์ ๋ ๋์์ ์ฃผ๊ธฐ ์ํจ์ด๋ค.
"bugs": {
"url": "http://github.com/owner/project/issues",
"email": "project@hostname.com"
}url์ด๋ email ์ค ํ๋๋ง ์ ์ฉ ํ ์ ์๊ณ , url ๋ง ์ง์ ํ๋ฉด ๊ฐ์ฒด๊ฐ ์๋๋ผ ๋จ์ํ ๋ฌธ์์ด์ bugs ํญ๋ชฉ์ ์ง์ ํ ์๋ ์๋ค.
url์ ์ง์ ํ๋ ๊ฒฝ์ฐ์๋ npm bugs ๋ช
๋ น์ ์ฌ์ฉํ ์ ์๋ค.
ํจํค์ง ์ฌ์ฉ์๋ค์ด ๋น์ ์ด ๋ง๋ ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ด๋ป๊ฒ ๊ถํ์ ์ป๋์ง, ๋ ์ด๋ค ๊ธ๊ธฐ ์ฌํญ์ด ์๋์ง ์๊ฒํ๊ธฐ ์ํด ๋ผ์ด์ผ์ค๋ฅผ ๋ช ์ํด์ผ ํ๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ 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 ๋ก ์ค์ ํจ์ผ๋ก์จ ๋ฏธ์ฐ์ ํผ๋ธ๋ฆฌ์ฑํ๊ฒ ๋๋ ๊ฒ์ ๋ง์์ค ์๋ ์๋ค.
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 ํญ๋ชฉ์ ํ๋ก์ ํธ์ ํฌํจ๋ ํ์ผ์ ๋ฐฐ์ด์ด๋ค. ํด๋ ์ด๋ฆ์ ์ง์ ํ๋ฉด ํด๋ ์์ ํ์ผ๋ ํฌํจ๋๋ค. (๋ฌผ๋ก , ๋ค๋ฅธ ์ค์ ์ ์ํด ํด๋น ํ์ผ๋ค์ด ๋ฌด์๋์ง ์๋ ๊ฒฝ์ฐ)
๋ํ .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 ํญ๋ชฉ์ ๋น์ ์ ํ๋ก๊ทธ๋จ์ ์์์ ์ด ๋๋ ๋ชจ๋์ ID ์ด๋ค. ์ฆ, 'foo' ๋ผ๋ ํจํค์ง๊ฐ ์๋ค๋ฉด, ์ด ํจํค์ง์ ์ฌ์ฉ์๊ฐ ์ค์น ํ ๋ค, require("foo") ๋ฅผ ์คํํ์ ๋ main์ผ๋ก ์ง์ ํ ๋ชจ๋์ exports ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
๋ชจ๋ ID๋ ํจํค์ง ๋ฃจํธ์ ์๋์ ์ธ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋๋ถ๋ถ์ ๋ชจ๋์ ์์ด์ ๋ฉ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ ๊ฒ์ ์ ์ฉํ์ง๋ง ์ข ์ข ๊ทธ๋ ์ง ์์์๋ ์๋ค.
๋ง์ ํจํค์ง๋ 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"
}CommonJS Packages ์คํ์๋ directories ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ํจํค์ง ๊ตฌ์ฑ์ ๋ํ๋ผ ์ ์๋ค. npm์ package.json ์ ๋ณด๋ฉด doc, lib์ man ์ผ๋ก ์ด๋ฃจ์ด์ง ๋๋ ํ ๋ฆฌ ๊ตฌ์ฑ์ ํ์ธ ํ ์ ์๋ค.
๋ฏธ๋์๋, ์ด๋ฌํ ์ ๋ณด๊ฐ ๋ ์ฐฝ์์ ์ธ ๋ชฉ์ ์ผ๋ก ์ด์ฉ๋ ์ง๋ ๋ชจ๋ฅธ๋ค.
๋ชจ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋์ ์๋์ง ๋ณด์ฌ์ค๋ค. lib ํด๋์ ํน๋ณํ ์ผ์ ํ์ง๋ ์์ง๋ง ๋ฉํ ๋ฐ์ดํฐ๋ก ์ ์ฉํ๋ค.
๋ง์ฝ directories.bin ๋ก bin ์ ์ง์ ํ๋ฉด, ํด๋น ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ด ์คํ ํ์ผ๋ก ์ถ๊ฐ๋๋ค. bin ์ด ๋์ํ๋ ๋ฐฉ์์ ์ํด, bin ๊ณผ directories.bin ์ ๋ชจ๋ ์ง์ ํ๋ ๊ฒ์ ์ค๋ฅ์ด๋ค. ๊ฐ๊ฐ์ ํ์ผ์ ์ง์ ํ๊ณ ์ถ๋ค๋ฉด bin์ ํน์ ํด๋ ์๋์ ๋ชจ๋ ํ์ผ์ bin ์ผ๋ก ์ง์ ํ๊ณ ์ถ๋ค๋ฉด directories.bin์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
man ๋ฌธ์๋ค์ด ์์นํ ํด๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค. "man" ๋ฐฐ์ด์ ๋ง๋๋ ๊ฒ๋ณด๋ค ๊ฐํธํ๋ค.
๋งํฌ๋ค์ด ํ์ผ๋ค์ ์ฌ๊ธฐ์ ์์น์ํจ๋ค. ์ธ์ ๊ฐ๋ ์ด ํ์ผ๋ค์ด ๋ฉ์ง๊ฒ ํ์๋ ๊ฒ์ด๋ค.
์์ ํ์ผ๋ค์ ์ฌ๊ธฐ์ ์์น์ํจ๋ค. ์ธ์ ๊ฐ๋ ์ด ํ์ผ๋ค์ด ๋ฉ์ง๊ฒ ํ์๋ ๊ฒ์ด๋ค.
์์ค ์ฝ๋๊ฐ ๊ด๋ฆฌ๋๋ ์ ์ฅ์ ์์น๋ฅผ ์ง์ ํ๋ค. ์์ค ์ฝ๋์ ์ฐธ์ฌํ๊ณ ์ํ๋ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ์ ์๋ค. ๋ง์ฝ 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์ ๋ช ์ํด์๋ ์๋๋ค.
script ํญ๋ชฉ์ ํจํค์ง์ ์๋ช
์ฃผ๊ธฐ ์ค ๋ค์ํ ํ์ด๋ฐ์์ ์คํ๋๋ script ๋ช
๋ น๋ค์ ํฌํจํ๊ณ ์๋ ์ฌ์ ์ด๋ค. scripts ํญ๋ชฉ ๊ฐ์ฒด์์ ํค๋ ์ด๋ฒคํธ์ด๊ณ , ๊ฐ์ ์ด๋ ์คํ๋ ์ปค๋งจ๋์ด๋ค.
์์ธํ ๋ด์ฉ์ npm-scripts (https://docs.npmjs.com/misc/scripts) ๋ฅผ ์ฐธ์กฐํ๋ค.
config ๊ฐ์ฒด๋ ํจํค์ง์ ๋ฒ์ ์ ๊ด๊ณ์์ด ํจํค์ง ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ๋ ์ ์๋ ์ค์ ์ ๋ณด์ด๋ค. ์๋ฅผ ๋ค์ด, ํจํค์ง์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ด ์ค์ ๋์ด ์๋ค๊ณ ํ๋ฉด,
"name": "foo",
"config": {
"port": "8080"
}start ๋ช
๋ น์ ์คํํ ๋ npm_package_config_port ๋ฅผ ์ฐธ์กฐํ ์ ์๊ฒ ๋๋ค. ๋ค์ ๋ช
๋ น์ผ๋ก ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ๋ฎ์ด ์ธ ์ ์๋ค.
npm config set foo:port 8001์์ธํ ๋ด์ฉ์ npm-config ๋ฐ npm-scripts ๋ฅผ ์ฐธ์กฐํ๋ค
์์กด์ฑ์ ๊ท์ ํ๋ ๊ฒ์ ํจํค์ง์ ์ด๋ฆ๊ณผ ํด๋น ํจํค์ง์ ๋ฒ์ ๋ฒ์๋ฅผ ์ง์ ํ ๊ฐ์ฒด๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค. ๋ฒ์ ๋ฒ์๋ ํ๋ ํน์ ์ฌ๋ฌ๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๋ถ๋ฆฌ๋ ์ค๋ช ์ ๋ฌธ์์ด์ด๋ค. ์์กด์ฑ์ 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"
}tarball์ url์ ์ง์ ํ ์๋ ์๋ค. ์ง์ ๋ tarball์ ํจํค์ง ์ค์น์์ ๋ค์ด๋ก๋๋๊ณ ์ค์น๋๋ค.
๋ค์๊ณผ ๊ฐ์ ํํ์ 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 ์ด๋ค.
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"
}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 ๊ฐ์ฒด์ ๋ํ๋์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
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๋ก ๋ณํํ์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์๋๋ก ํผ๋ธ๋ฆฌ์ฑ์ ํ๊ธฐ์ ์ ์คํ๋ ๊ฒ์ด๋ค.
๋น์ ์ด ๋ง๋ ํจํค์ง๊ฐ ๋ค๋ฅธ ํจํค์ง์ ์ง์ 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.0npm ๋ฒ์ 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" ๋ฅผ ์ฌ์ฉํ๋ค.
ํจํค์ง๋ฅผ ํผ๋ธ๋ฆฌ์ฑํ ๋ ๋ฒ๋ค๋๋ ํจํค์ง ์ด๋ฆ๋ค์ ๋ชฉ๋ก
์ฌ์ฉ์ ์ํ๋ ๋ชจ๋์ด์ง๋ง, ์๊ฑฐ๋ ์ค์น๊ฐ ์คํจํด๋ 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 ์ ๊ฐ์ ์ด๋ฆ์ด ์์ผ๋ฉด ๋ฎ์ด์ฐ๊ฒ ๋๋ฏ๋ก ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ํ์ชฝ์๋ง ๊ธฐ์ฌํ๋ ๊ฒ์ด๋ค.
๋์ ๊ฐ๋ฅํ node์ ๋ฒ์ ์ ์ง์ ํ ์ ์๋ค.
"engines" : { "node" : ">=0.10.3 <0.12" }์ฃผ์ํ ์ ์, ์ฌ์ฉ์๊ฐ engine-strict config flag ๋ฅผ ์ค์ ํ์ง ์์ผ๋ฉด ์ด ํ๋๋ ๋จ์ง ์กฐ์ธ์ฉ์ผ๋ก๋ง ์ฌ์ฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ npm 3.0.0 ๋ฒ์ ๋ถํฐ deprecated ๋์๋ค. npm 3.0.0 ์ด์ ์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉ์๊ฐ engine-strict ๋ฅผ ์ค์ ํ ๊ฒ๊ณผ ๊ฐ์ด ๋ค๋ฃจ์ด์ง๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋์๋ค.
๋น์ ์ ๋ชจ๋์ด ์ด๋ค ์ด์์ฒด์ ์์ ์๋ํ๋์ง ์ง์ ํ ์ ์๋ค. ์๋ ์๋ OSX์ ๋ฆฌ๋ ์ค์์ ๋์ํ๋ค๋ ์๋ฏธ์ด๋ค.
"os" : ["darwin", "linux"]ํ์ดํธ๋ฆฌ์คํธ ๋ฐฉ์ ๋์ ์ ๋ธ๋๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก๋ ์ง์ ํ ์ ์๋๋ฐ, ๋จ์ํ OS ์์ '!' ๋ฅผ ๋ถ์ด๋ ๊ฒ๋ง์ผ๋ก ๊ฐ๋ฅํ๋ค.
"os" : ["!win32"]์ด์์ฒด์ ์ ๋ฌธ์์ด์ process.platform ์ ์ํด์ ๊ฒฐ์ ๋๋ค. ๋ธ๋๋ฆฌ์คํธ์ ํ์ดํธ๋ฆฌ์คํธ ๋ฐฉ์์ ๋๋ค ๋์์ ์ฌ์ฉํ ์๋ ์์ง๋ง, ๊ทธ๋ ๊ฒ ํด์ผํ ๊น๋ญ์ด ๋ณ๋ก ์์ ๊ฒ์ด๋ค.
๋ง์ฝ ๋น์ ์ ์ฝ๋๊ฐ ํน์ ํ CPU ์ํคํ ์ณ์์๋ง ๋์ํ๋ค๋ฉด ๊ทธ๊ฒ์ญ์ ๋ช ์ํด์ค ์ ์๋ค.
"cpu" : ["x64", "ia32"]OS ์ค์ ๊ณผ ๊ฐ์ด ๋ธ๋๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ์ง์ ํด์ค ์๋ ์๋ค.
"cpu" : ["!arm", "!mips"]ํธ์คํธ ์ํคํ ์ณ๋ process.arch ์ ์ํด ๊ฒฐ์ ๋๋ค.
ํจํค์ง๊ฐ ๊ธ๋ก๋ฒ ์ค์น(-g ์ต์ ์ ๋ถ์ฌ ์ค์น)๋ฅผ ์ํํด์ผ๋ง ํ๋ค๋ฉด, ์ด ๊ฐ์ true๋ก ํด์ local ์ค์น์์ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ ์ ์๋ค. ์ด๊ฒ์ local ์ค์น๋ฅผ ์์ ํ ๋ง์ง๋ ๋ชปํ์ง๋ง, ํจํค์ง๊ฐ ์์๊ณผ ๋ค๋ฅด๊ฒ ๋์ํ๋ ํผ๋์ ํผํ๋ ๋ฐ ๋์์ด ๋๋ค.
๋ง์ฝ "private": true ๋ก package.json ์ ์ค์ ํด๋๋ฉด, publish ๋ช
๋ น์ ๊ฑฐ๋ถํ๊ฒ ๋๋ค.
์ด ํ๋๊ทธ๋ ๊ฐ์ธ์ ์ผ๋ก๋ง ์ฌ์ฉํ๋ ์ ์ฅ์๋ฅผ ๋ฌด์ฌ์ฝ publish ํด ๋ฒ๋ฆฌ๋ ๊ฒ์ ๋ฐฉ์งํ๋ค. ๋ง์ฝ (๋ด๋ถ ๋ ์ง์คํธ๋ฆฌ ๋ฑ) ํน์ ๋ ์ง์คํธ๋ฆฌ ๋ง์ ์ถ์ํ๋ ํ๊ฒฝ์ ์ํ๋ค๋ฉด, ์๋์ publishConfig ๋ฅผ ์ด์ฉํ์ฌ publish์ registry ์ค์ ์ ๋ฎ์ด ์ธ ์ ์๋ค.
publish ํ ๋ ์ฌ์ฉ๋๋ ์ค์ ์ด๋ค. tag ์ registry, access ๋ฅผ ๋ค๋ฃฐ ๋ ํธ๋ฆฌํ๋ฐ, ์ด๊ฒ๋ค์ ์ค์ ํด์ ํจํค์ง๊ฐ "lastest"๋ก ํ๊ทธ๋๊ฑฐ๋, public registry ์ publish ๋์ง ์๋๋ก ๋ scoped module์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก private ๋ก ํด์ฃผ๋ ๊ฒ ๋ฑ์ ์ฝ๊ฒ ์ค์ ํด์ค ์ ์๋ค.
์ค์ ํญ๋ชฉ ๊ฐ์ ๋ฎ์ด์ฐ๊ฒ ๋์ง๋ง, ์ค์ง "tag"์ "registry", "access" ๋ง publish ์ ๋ชฉ์ ์์ ๋ค๋ค์ง๊ฒ ๋ ๊ฒ์ด๋ค.
๋ฎ์ด ์ธ ์์๋ config ์ต์
์ npm-config ์์ ํ์ธํ ์ ์๋ค.
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์ ํ์๊ฐ์ด ์๋๋ค. # ๋๋ ๊ณต๋ฐฑ์ผ๋ก ์์๋๋ ์ค์ ๋ฌด์ํ๊ฒ ๋๋ค.