예로, 여러 레포지토리에서 공통으로 사용하는 함수나 유틸리티를 하나의 패키지로 모을 수 있음
2. 패키지 생성
해당 코드를 포함한 새로운 프로젝트를 생성,package.json 파일을 작성하여 npm 패키지로 등록할 준비
3. 배포
공통 기능을 npm 레지스트리에 배포
4. 각 프로젝트에서 사용
개별 프로젝트에서 이 패키지를 의존성으로 추가
npm install <패키지명> 명령어를 사용해 패키지를 설치하고 필요한 곳에서 require 또는 import를 통해 불러옴
5. 업데이트 관리
공통 기능에 변경이 있을 경우 npm 패키지 업데이트
각 프로젝트에서 패키지 버전을 업데이트하여 최신 기능을 사용할 수 있도록 함
Package publish&install
npm publish: 패키지를NPM registry라는 곳에 업로드를 시킴
npm install: 패키지를 다운로드
ex) 왼쪽 : 만든 패키지, 오른쪽 : 패키지를 사용할 프로젝트
부품으로써 사용
왼쪽 부품 이름이 @egoing/hi 라면, 오른쪽에서npm i @egoing/hi를 통해 가져다가 쓸 수 있음
완제품으로 사용say-hi-all.app.js라는 파일이 실제로 사용자들에게 사용될 때는,say-hi 라는 이름으로 사용됨package를 사용할 오른쪽 프로젝트에서npm i -g @egoing/hi를 통해 전역적으로 설치한 후에
say-hi라고 입력하면, 정상적으로 패키지가 실행됨
Package 만들기
npm-producer 폴더 생성 후,npm init을 통해 패키지 있다라고 선언
name
패키지 이름을 선언
인사를 하는 패키지를 만든다고 가정, 이름을 선언할 때는 앞에 @를 통해 스코프를 설정
스코프는 중복을 피하기 위해 사용. 보통 자신의 이름을 넣거나 자신이 만들고자 하는 앱의 이름 등을 사용
version
버전 설정
description
package 설명
entry point
내 패키지를 다른 사람이 부품으로 가져다가 쓸 때 어떤 파일의 내용을 입구 파일로할지 결정
test command, git repository, keywords, author 생략
위와 같은 package.json이 생성됨
main.js를 생성 후 위와 같이 작성하면, 다른 프로젝트에서 main.js를 required했을 때 export 뒤쪽의 값이 전달됨
Package 올리기
만든 패키지를 다른사람이 사용하도록 하기 위해서는 npm registry에 내 package를 업로드해야 함
먼저 npm.js 홈페이지에서 계정 생성
npm이라고 치면, 사용가능한 명령어들이 나옴
package를 누구나 사용가능하게 하고싶으면,
npm publish —access public
위 사진과 같은 에러가 발생 →npm login필요
입력 후 npmjs 페이지에서 로그인 후 돌아오면 위와 같이 로그인 되었다고 로그가 나옴
이후,npm publish —access public이 명령어를 입력하면
위와 같이 404 에러가 나옴
npmjs의 내 계정 이름이 jiohjung98이어서 패키지 이름을 jiohjung/hi → jiojung98/hi로 바꾸고 다시 재시도해보았더니,
위처럼 정상적으로 실행됨을 확인할 수 있었음
이후 npm.js를 접속해보면 위 사진처럼 @jiohjung98/hi 패키지가 정상적으로 업로드되었음
Package 설치하기
위에서 발행한 package를 사용할 새로운 프로젝트를 하나 생성(npm-consumer)
npm init -y를 통해 package.json을 기본값으로 생성
npm i @jiohung98/hi를 통해 package를 install하면
package.json의 dependencies에 내가 생성한 package.json이 설치된 것을 확인할 수 있고
node_modules와 package-lock.json이 생성됨
이후 index.js를 생성하고 package를 불러온 후에
node index.js를 통해 package의 내용을 가져옴을 확인
Package 업데이트
npm producer 프로젝트에서 main 내용을 변경한 후에
package.json 버전을 꼭 업데이트해줘야 함
이후,npm publish를 통해 패키지를 업데이트 해줌
npm-consumer 프로젝트에서npm outdated를 입력하면, 위 사진처럼 패키지의 현재 버전과 최신 버전을 확인할 수 있음
이 상황에서,npm update를 하면 업데이트가 안됨(그대로 유지)
이유는 아래처럼, 버전을 명시해뒀기 때문임
위처럼 패키지 버전에~를 넣으면, 두 번째 자리의 버전이 같은 범위에서 세 번째 자리는 가장 최신 버전을 채택한다는 의미를 가짐