- Description
- package.json에 필요한 모든 것들
- json일 수도 있고 문자열일 수도 있는, 패키지에 대한 설명
- 사람들이 패키지를 찾아내고, 이해하는데 도움을 줌
- name
- version과 더불어 가장 중요한 부분!
- version과 name은 패키지의 가장 unique한 식별자가 될 수 있다.
- 없으면 패키지 설치 불가
- 패키지의 변경은 version의 변경을 동반한다.
- name필드는 몇 가지 규칙을 동반한다.
- name은 214자 이하여야 한다.
- name은 . 또는 _ 로 구성되어야 한다.
- name은 소문자로 구성되어야 한다.
- the name can't contain any non-URL-safe characters.
- "{", "}", "|", "\", "^", "~", "[", "]", and "`".
- version
- node-semver
- version은 node-semver에 의한 해석이 가능해야 한다.
const semver = require('semver')
semver.valid('1.2.3')
semver.valid('a.b.c')
semver.clean(' =v1.2.3 ')
semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3')
semver.gt('1.2.3', '9.8.7')
semver.lt('1.2.3', '9.8.7')
semver.minVersion('>=1.0.0')
semver.valid(semver.coerce('v2'))
semver.valid(semver.coerce('42.6.7.9.3-alpha'))
- comparator
-
<
Less than
-
<=
Less than or equal to
-
>
Greater than
-
>=
Greater than or equal to
-
=
Equal. If no operator is specified, then equality is assumed, so this operator is optional, but MAY be included.
semver.inc('1.2.3', 'prerelease', 'beta')
package.json에서 version을 표현할 때 쓰는 문법인 듯 하다..
- description
- string으로 패키지 검색을 위한 글자를 작성한다.
- description은 npm search로 검색 가능
- keywords
- keywords는 string[]형식이다.
- 역시 npm search로 검색 가능
- homepage
"homepage": "https://github.com/owner/project#readme"
project 홈페이지에 대한 링크
- bugs
{
"url" : "https://github.com/owner/project/issues",
"email" : "project@hostname.com"
}
project 이슈 트래커에 대한 링크나 연락처
- license
- license는 외부인이 사용 가능여부와 사용 제한에대해 알 수있게 한다.
- 사용불가능한 패키지는 “UNLICENSED”, “private” 등으로 설정하기도 한다.
- people
{
"name" : "Barney Rubble",
"email" : "b@rubble.com",
"url" : "http://barnyrubble.tumblr.com/"
}
- author은 한 사람
- contributors은 사람의 배열
- person자체는 name, email, url 등의 프로퍼티를 가진 객체다.
- funding
{
"funding": {
"type" : "individual",
"url" : "http://example.com/donate"
},
"funding": {
"type" : "patreon",
"url" : "https://www.patreon.com/my-account"
},
"funding": "http://example.com/donate",
"funding": [
{
"type" : "individual",
"url" : "http://example.com/donate"
},
"http://example.com/donateAlso",
{
"type" : "patreon",
"url" : "https://www.patreon.com/my-account"
}
]
}
유저는 npm fund를 통해 패키지 개발에 자금을 지원하는 방법에 대한 최신 정보를 제공하는 URL이 포함된 객체, 문자열 URL 또는 이러한 객체의 배열을 지정할 수 있습니다.
- files
- 선택적 파일 필드는 패키지가 종속성으로 설치될 때 포함될 항목을 설명하는 파일 패턴의 배열입니다. 파일, 디렉토리 또는 글로브 패턴(, /* 등)을 포함하면 패키지를 패킹할 때 해당 파일이 포함되도록 합니다. 이 필드를 생략하면 기본값이 [""]가 되어 모든 파일이 포함된다.
- .git, CVS, .svn, node_modules등의 파일은 항상 ignore된다.
- main
- 메인 필드는 프로그램에 대한 기본 진입점인 모듈 ID이다. 메인 스크립트를 설정하지 않으면 기본적으로 패키지의 루트 폴더에 있는 index.js로 설정된다.
- browser x
- 모듈을 클라이언트 딴에서 사용하려는 경우 브라우저 필드를 사용해야한다.
- bin
- 패키지가 전역으로 설치되면 해당 파일이 전역 bins 디렉터리 내에 링크되거나 bin 필드에 지정된 파일을 실행하는 cmd(Windows 명령 파일)가 생성된다. bin필드는 실행 가능한 자바스크립트 파일을 상위 패키지에 노출하는데 사용되는 필드다.
- man
{
"name": "foo",
"version": "1.2.3",
"description": "A packaged foo fooer for fooing foos",
"main": "foo.js",
"man": "./man/doc.1"
}
- 프로그램이 찾을 수 있도록 단일 파일 또는 파일 이름 배열을 지정한다.
- 단일 파일만 제공된 경우, man 의 결과물이 되도록 설치됩니다.
- 위 예시처럼 man필드를 작성할 경우 foo로 파일이 변경
- directories
- CommonJS 패키지 사양에는 디렉토리 객체를 사용하여 패키지의 구조를 나타낸다.
- npm의 package.json을 보면 doc, lib, man에 대한 디렉토리가 있다.
- repository
- scripts
- script 속성은 패키지 lifecycle에서 다양한 시점에 실행되는 스크립트 명령이 포함된 딕셔너리다.
- key : event
- value : 실행할 명령
- lifecycle 스크립트 종류
- NPM
- prepare : 패키지가 패킹 되기 전에 실행되는 스크립트
- publish, pack, install이 실행될 때 호출됨
- prepublishOnly : prepare, packed이전에 실행
- prepack : 패키지가 압축되기 전에 호출
- postpack : 최종목적지에 이동하기 전에 호출
- dependencies : node_modules 디렉토리가 수정되었을 때 호출
- life cycle op order scripts | npm Docs
- User
- npm이 root에서 실행될 때 ( 최상위 디렉토리를 말하는 것 같다. ) 스크립트는 유효한 uid 및 gid로 실행된다.
- uid
- Math.random메소드를 이용해 부여되는 랜덤의 uid
- 보안을 위해 crypto.getRandomValues()를 이용하기도한다.
- config
- Dependencies
- 패키지 이름, 버전 범위를 맵핑한 오브젝트를 통해서 의존성을 지정한다. 버전 범위는 한칸or공백으로 구분되는 문자열들로 나타낸다. 의존성은 압축파일 형태거나 git URL로 식별된다.
- 시험 목적, 코드 변환, 컴파일을 위한 도구는 dependencies 객체에 포함시키지 말도록 하고, 대신에 devDependencies를 참조…
- URL ,Git, Local 경로 가능
- devDependencies
- 외부인이 내 모듈을 이용하여 다른 프로그램을 작성할 때 우리 모듈에서 사용하고 있는 외부 테스트 프레임워크나 문서화 프레임워크를 같이 다운받고 싶지 않을 것이다. 이런 것들은 개발에만 필요하지 모듈 사용에는 필요하지 않다.
- 이런 경우 추가적인 항목들을 이 필드에 넣느다.
- 이 항목들은 npm link 또는 npm install을 실행할 때 설치된다.
- engines
- OS
- 모듈이 동작할 수 있는 운영 체제를 지정할 수 있다.
- !를 사용해 블랙리스트도 지정가능하다.
- **cpu필드도 마찬가지**
- preferGlobal
- 작성하는 패키지가 명령행 애플리케이션으로 반드시 -g로 설치되어야 한다면 이 필드를 true로 설정해서 로컬 설치 시 경고를 출력가능하다.
- private
- 이 필드를 true로 설정하면 배포가 불가능해진다.
- 만약 패키지가 특정 레지스트리에만 배포되어야 한다면
- publishConfig 딕셔너리 registry 설정 파라미터를 사용해야한다.
- publishConfig
- Default fields
"scripts": {"start": "node server.js"}
"scripts":{"preinstall": "node-gyp rebuild"}
"contributors": [...]