npm 패키지 제작기 1
NPM 패키지 제작하기
markdown parser 기능과 헤더에 따른 내용 그룹핑 기능을 만들어보자.
package.json
npm 이라는 패키지 관리 플랫폼에 새로운 패키지를 등록해보자.
관련 내용을 가장 정확하게 배울 수 있는 곳은 바로 도큐먼트!
늘 느끼는 거지만 영어로 써놓으면 뭔가 읽기가 싫어진다…
어쨋든 도큐먼트를 본 결과 먼저 package.json
을 만들어야 한다.
What is package.json?
내가 만든 패키지를 다른 사람들이 관리하고 설치하기 위해서는, npm에 배포하는 패키지 내부에 반드시 package.json
을 포함해야 한다.
- 나의 프로젝트에서 사용하는 다른 패키지들(의존성)
- 나의 프로젝트에서 사용할 수 있는 패키지의 버전들을 표기(Semantic Versioning Rules 를 따른다.)
- 나의 프로젝트의 build 를 복제 가능하게 하여, 다른 개발자들과 편하게 공유할 수 있게한다.
npm 웹사이트에서 나의 패키지를 더 쉽게 찾을 수 있게 하려면, 임의로 만든
description
을package.json
에 포함하자.
package.json 의 항목들
필수항목
- name
- 내 패키지의 이름. 소문자 이며, 한 단어 여야 한다.
-
혹은_
기호를 포함할 수 있다. - version
- 내 패키지의 버전. Semantic Versioning Rules 를 따라야 한다.
선택항목
- author
- 제작자 정보를 포함하고 싶을 때, 다음 포맷을 활용한다.
Your Name <email@example.com> (http://example.com)
작성 예시
1
2
3
4
5
{
"name": "my-awesome-package",
"version": "1.0.0",
"author": "Your Name <email@example.com>"
}
package.json 파일 생성
package.json
파일은 CLI 명령어를 통해 사용이 가능하다.
명령어에서 요구하는 질문들을 통해 항목들을 미리 채워넣을 수도 있고, 그냥 default 파일로 생성할 수도 있다.
질문을 통한 생성
- 경로 이동 및 명령어 실행
1 2
cd /내경로 npm init
- 커맨드창의 질문에 답한다.
npm init 질문 커스텀하기
만약package.json
을 많이 생성할 것 같으면npm init
과정의 질문과 생성 항목들을 커스터마이징 가능하다.
- 사용자 home 경로에
.npm-init.js
파일을 생성- 질문 커스터마이징을 위해서는
prompt
함수를 사용
1 module.exports = prompt("what's your favorite flavor of ice cream, buddy?", "I LIKE THEM ALL");- 생성 항목 커스터마이징을 위해서는 필드를 직접 추가.
1 2 3 4 module.exports = { customField: 'Example custom field', otherCustomField: 'This example field is really cool' }더 자세한 내용은 도큐먼트 init-package-json GitHub repository 를 참조
default package.json 생성
1
2
cd /내경로
npm init -y
default 값들의 목록은 도큐먼트(Default values extracted from the current directory) 참조
init 명령어에 default 옵션 설정하기
init 명령어에 default 옵션 설정이 가능하다. 예를 들면
1
2
3
npm set init-author-email "example-user@example.com"
npm set init-author-name "example_user"
npm set init-license "MIT"
init 명령어에 scope 설정하기
package에 scope을 설정하기 위해서 다음과 같이 명령어에 옵션을 추가한다 npm init --scope=@scope-name
scope란?
npm에서 유저 계정이나 조직을 생성하면, 여기에 해당하는 scope를 사용할 수 있게된다.
scope의 역할은 다른 패키지와 동일한 이름을 사용하고 싶을 때 충돌을 방지해주는 역할을 한다.
예를 들어서 scope는 패키지 이름 앞에 이런식으로 붙습니다.
- “npm” scope :
@npm/package-name
- “npmcorp” scope :
@npmcorp/package-name