moleculer 프레임워크는 모노레포로 프로젝트를 구성해서 각 환경? 을 관리한다.
모노레포는 공통이 되는 모듈을 npm에 배포해서 패키지형태로 관리하게 되는데
이를 위해 Npm에 간단하게 배포하는 과정을 경험해보고자 한다.
1. 현재 프로젝트를 패키지로 만들기
$ npm init --scope=jihoon
개발자 Jihoon이라는 사람이 자신의 패키지를 발행하려고 할 때, jihoon이라는 스코프를 사용하여 패키지를 발행할 수 있다.
이렇게 하면 패키지의 이름이 @jihoon/패키지이름 형식으로 지정되며, 해당 패키지가 Jihoon이라는 개발자에 의해 생성되었음을 명시적으로 알 수 있게 된다.
따라서 npm init --scope=jihoon 명령어를 사용하면 Jihoon이라는 스코프로 새로운 npm 패키지를 초기화할 수 있다.
근데, 보통은 팀단위로 하기도하고 회사이름을 붙이기도한다.
@회사이름 or 팀이름 or 그룹이름 or 조직이름 / 프로젝트명 or 패키지이름
npm install @<조직 이름>/<패키지 이름>
과 같은 패키지명을 만들게 된다.
2. 간단한 함수 작성 후 테스트
npm에 배포하기 전에 작성한 모듈을 로컬 환경에서 npm link를 이용해 확인할 수 있다.
해당 프로젝트의 루트 디렉토리 안에서 npm link를 명령어를 실행시키면 npm이 해당 폴더에 링크를 생성해준다.
그럼 다른 프로젝트에서 링크된 패키지를 사용할 수 있게 된다.
$ npm link
아래 명령어로 현재 전역 범위에 설치된 npm 패키지들을 확인해본다.
$ npm ls -g --depth=0
이제 다른 프로젝트에서 설치하면 위 범위로 내가 작성한 모듈이 보일 것이다.
playground 프로젝트를 새로 판 뒤, test.js라는 파일을 만들고
내가 만든 패키지를 link 명령어를 써서 설치한다.
위처럼 node_modules 아래에 내가 만든 패키지가 설치되어 저장되었다.
간단히 테스트를 해보니 결과도 정상적으로 출력된다.
3. public repo에 배포 후 배포 취소하기
우선 Npm에 회원가입을 해야한다.
회원가입한 이메일로 otp 번호가 가니 확인하면 된다.
패키지 이름에 네임스페이스(e.g. @musma-test)를 추가하면 패키지가 기본값으로 private으로 배포가 되기 때문에
--access=public으로 옵션을 주어서 public 패키지임을 명시해야한다. (private은 유료!)
$ npm publish --access=public
참고로 username으로 배포되니까 이걸 같게 해야 배포가된다.
나는 npm username과 실제로 프로젝트에 만든 @<name> 부분이 달라서 이를 수정했다.
그래서 위 name과 지금부터의 name이 다르다.
playground 프로젝트에서 패키지를 설치해서 테스트를 해보면 정상적으로 결과가 출력된다.
이제 패키지를 삭제해보자.
72시간내에 패키지 삭제를 하지않으면 Npm에 요청해서 제거해야해서 귀찮아진다.
나는 -f 명령어로 모든 버전을 제거했다.
특정 버전만 제거도 가능하니 아래 참고링크 보면 된다.
만약 .ts 파일을 배포한다면 npm run build로 파일을 컴파일한 뒤 npm publish --access=public 명령어를 사용하면 된다.
npm 배포한다는 것이 어려운 것일 줄 알았는데, 생각보다 간단해서 이렇게 Monorepo를 구성하는구나 싶었다.
모노레포의 기본이 되는 프로젝트 공통 모듈 관리 방법인 만큼 알고 넘어가는 것이 좋겠다고 생각했고 재밌는 경험이었다.
참고
https://musma.github.io/2023/08/28/how-to-publish-npm-package.html
npm 배포 삭제
https://www.daleseo.com/js-npm-publish/
'JaveScript > NodeJS' 카테고리의 다른 글
nvm 버전 변경 (0) | 2024.05.24 |
---|---|
jest 테스트프레임워크 공부중 (0) | 2024.05.23 |
MaxListenersExceededWarning (1) | 2024.04.07 |
NodeJS 로그 터미널에서 확인하기 (0) | 2023.07.19 |
JavaScrpit과 NVM, NPM (0) | 2023.07.13 |