NPM 패키지 만들기

k.·2020년 7월 15일
6
post-thumbnail
post-custom-banner

패키지 용도

1.다른 패키지의 부분으로써 사용

var my = require('my-package');

2.완결성을 가진 패키지가 완제품으로써 사용

$my-package

인터넷 환경 어디서든 npm 패키지를 사용하기 위해



실습 순서

1.부품으로써 패키지 사용

2.완제품으로써 패키지 사용(명령어 이용)


부품으로 사용할 패키지 만들기

  1. package.json 파일 만들고, 새로운 프로젝트나 패키지를 만들 때 사용
npm init

[옵션] -y : 전부 디폴트 세팅으로 설정

  1. 패키지 이름 설정

@smkim/hi


  1. 버전 설정

  1. 엔트리 포인트 설정

entry point : 나의 패키지를 다른 사람이 부품으로 가져다 쓸 때, 어떤 파일의 내용을 진입 파일로 사용하는 가를 정하는 것

  1. 나머지 설정들 그냥 패스~


package.json 파일이 생기고, 입력한 내용이 json 데이터 포맷으로 저장된 것을 볼 수 있다.


  1. main.js 파일 생성 및 작성

    나의 패키지를 사용하는 소비자들이 쓸 수 있게 만들기 위해 export 한다.

  2. publish

npm publish --access public

[옵션] --access : 누구나 볼 수 있게
private : 유료, 사설 저장소에 registry 구축

// 삽질 시작..


A. 로그인
에러 : error code No 4048....not permitted.... 어쩌고

npmjs.com


회원가입을 한다

npm login

@로그인이 이미 돼있나 헷갈릴 때는

npm whoami



B. 패키지명 중복

에러 : error code E403
publish 하려는 패키지의 name 을 이미 사용하고 있다

이미 사용되고 있는 패키지 명인지 확인하려면

npm info [패키지명]

패키지에 대한 정보가 나온다면 누군가가 사용하고 있는 이름이고,
npm ERR! code E404 Registry returned 404 for GET on [주소] 에러가 발생한다면 사용해도 좋은 이름

a.이미 존재하는 경우

b.없는 경우(에러 발생)


C. proxy

프록시나 네트워크 문제라고 해서 찾아보니

*npm 설정 목록 보기

npm config list

설정 다시 원복....

npm config delete proxy
npm config delete https-proxy

D. (.npmrc) 파일 : npm config file
npm은 command line, 환경변수, npmrc 파일에서 설정값을 가져온다.
npm config 명령어가 결국, npmrc 파일을 수정하는 명령어인 것


E. 버전 문제
https://github.com/npm/npm/issues/21010
npm 깃헙 이슈 중에 npm 버전을 6.0 으로 업그레이드 하고 나서 403 에러를 해결한 사례

v5.6.0    ->    v6.0.1

npm install npm@6.0 -g

F. @smkim 스코프 제거

scope

npm 사용자 계정에 가입하거나 Org.를 만들면 사용자, Org. 이름과 일치하는 범위가 부여됨. 이 범위를 관련 패키지의 네임 스페이스로 사용할 수 있다.
스코프를 사용하면 충돌없이 다른 사용자나 Org.이 만든 패키지와 이름이 같은 패키지를 만들 수 있다.

@npm/package-name

@와 /사이가 스코프

scoped and package

  • unscoped 패키지는 항상 public
  • private 패키지는 항상 scoped 패키지여야 함
  • scoped 패키지는 디폴트로 private이기 때문에, 공개할 경우 커맨드 라인에 플래그를 명시해야함

username 이 아닌 스코프를 사용하고 싶다면 Org. 를 만들어야 함
(https://www.npmjs.com/org/create)

패키지명 가이드라인

  • 중복불가
  • 기능을 설명할 수 있어야함
  • 욕설 또는 불쾌한 이름 불가
  • 상표 이름 불가
  • (unscoped package)다른 패키지명과 비슷한 철자 불가




버전업(README.md 작성)

버전 변경 필수(같은 버전으로 publish 불가, 동일 버전일 경우 거절) -> npm publish



패키지 사용하기

사용하는 쪽에서도 본인 패키지 생성

npm init -y

사용할 패키지 설치

npm i test-test-test-hihi

index.js 생성 및 작성

실행

node index.js



명령행 프로그램 만들기

cli.js 생성 및 작성

var greeting = require('./index');
// process.argv[2] : 인자
console.log('Greeting : ' + greeting[process.argv[2]]);

registry에서 패키지 삭제

npm unpublish [<@scope>/]<pkg>[@<version>]

vs NPX

기존에 설치한 패키지 삭제

npm uninstall test-test-test-hihi

npx

npx test-test-test-hihi
  • 실행할 때마다 최신버전 사용 가능
  • 쓰지 않는 경우, 찌꺼기가 남지 않음(실행 후 삭제)
  • 실행할 때마다 다운로드 받기 때문에 느림


SemVer : Semantic Versioning

형식 : [Major].[Minor].[Patch]

ex)

  • 기존 버전과 호환되지 않게 수정할 경우, major 버전 up
  • 기존 버전과 호환되면서 새로운 기능을 추가할 때는, minor 버전 up
  • 기본 버전과 호환되면서 버그를 수정할 때는, patch 버전 up

버전을 직관적으로 3부분으로 표현하여, 라이브러리를 업데이트 할 경우, 참고하여 업데이트 여부 판단 가능

^(캐럿), ~(틸드), <, >, >=, <=

^(캐럿)

[minor]버전까지 설치 및 업데이트(호환되는 경우만)

npm i express@^1.1.1

위의 경우, 1.1.1 <= 버전 <2.0.0(1.x.x 로 표현 가능)

~(틸드)

지정한 버전의 마지막 자리 내의 범위만 자동으로 업데이트

npm i express@~1.1.1

위의 경우, 1.1.1 <= 버전 < 1.2.0 까지 설치됨(1.1.x 로 표현 가능)

^(캐럿) 예외사항

버전이 1.0.0 미만일 경우(pre-release), API 변경이 수시로 일어난다. 0.1과 0.2의 차이가 크기 때문에 캐럿이 틸드처럼 동작

  • ^0.1.2 : >=0.1.2 < 0.2.0
  • ^0.1 : >= 0.1.0 < 0.2.0
  • ^0 : >= 0.0.0 < 1.0.0

최신 버전 설치(@latest)

npm i express@latest 또는 npm i express@x







참고자료

post-custom-banner

0개의 댓글