[npm link] npm link로 라이브러리 배포전 테스트 방법

1. 상황

라이브러리를 개발해서 npmjs 에 배포하기전에 테스트를 하고 싶은 상황

  • npmjs에 publish하면 되돌릴 수 없다.

2. 사전 조건

그리고 아래와 같이 두개의 프로젝트가 있다.

  • mind-wired - 테스트하려는 라이브러리 개발 프로젝트, prjA라고 하겠음
  • sample-prj - mind-wired를 사용하는 테스트용 프로젝트, prjB라고 하겠음.

실행 환경에 대한 정리

  • nvm 으로 node 설치. 아래 문서에서 설명하겠지만 동일한 node 버전으로 맞추는걸 권장함
  • 라이브러리 프로젝트에서는 최종 산출물을 dist디렉토리에 생성하고 있음. 최종 산출물에 대해서 테스트를 하려고 함(즉, prjA의 src 디렉토리에 있는 실제 코드를 테스트하는게 아님)
  • vscode에서 live server를 사용해서 테스트용 웹서버를 실행함

3. npm link

개발중인 로컬 환경에서 마치 라이브러리를 배포한 것처럼 symbolic link를 생성해주는 npm의 명령어

prjA의 루트 디렉토리는 아래와 같이 생겼음.

mind-wired 루트 디렉토리
[mind-wired] +- package.json +- src +- dist +- ...

package.json 등이 있는 루트 디렉토리에서 다음과 같이 npm link명령어를 실행함

npm link 실행
mind-wired git:(master) ✗ npm link audited 303 packages in 2.344s 34 packages are looking for funding run `npm fund` for details found 0 vulnerabilities /Users/___/.nvm/versions/node/v14.18.2/lib/node_modules/mind-wired -> /Users/___/workspace/ws-js/mind-wired
  • 위처럼 .nvm밑에 mind-wired라는 심볼릭 링크가 생성됨

생성된 경로를 따라가서 확인해보면 아래와 같음

npm link 실행 전

링크 생성 전
➜ node_modules ls -al total 0 drwxr-xr-x 3 _____ staff 96 Nov 30 23:28 . drwxr-xr-x 4 _____ staff 128 Nov 30 23:28 .. drwxr-xr-x 24 _____ staff 768 Nov 30 23:28 npm

실행 후에는 아래와 같이 링크가 생성됨

링크 생성 후
➜ node_modules ls -al total 0 drwxr-xr-x 4 ___ staff 128 May 23 10:50 . drwxr-xr-x 4 ___ staff 128 Nov 30 23:28 .. lrwxr-xr-x 1 ___ staff 42 May 23 10:50 mind-wired -> /Users/___/workspace/ws-js/mind-wired drwxr-xr-x 24 ___ staff 768 Nov 30 23:28 npm

4. 테스트

이제 prjB는 prjA를 include해서 테스트하려고 함.

prjB의 루트 디렉토리에서 다음과 같이 링크를 걸어줌.

명령어 npm link prjA
mind-wired-test npm link mind-wired /Users/___/workspace/ws-js/mind-wired-test/node_modules/mind-wired -> /Users/___/.nvm/versions/node/v14.18.2/lib/node_modules/mind-wired -> /Users/___/workspace/ws-js/mind-wired ➜ mind-wired-test

prjB의 node_modules를 살펴보면 아래와 같음

TXT