Tips/Node.js

[Node.js] 로컬에서 npm 패키지 테스트 하기 - npm link

dextto™ 2022. 3. 27. 19:17

여러분이 만들고 있는 Node.js 모듈을 npm 패키지로 배포하려고 할 때 작성 중인 소스 코드를 어떻게 테스트 하시나요? 사용자를 위해 작성할 사용 예시처럼 이 패키지를 가져다 쓰는 모듈에서 동작하는 지를 직접 구현해 봐야 될 겁니다. 하지만 이 과정이 여간 귀찮은 게 아닙니다. npm package로 패키징을 한 후, 사용하는 모듈의 node_module의 적당한 위치에 다시 압축을 직접 풀어 주어야 합니다.

 

그렇다면 더 쉬운 방법은 없을까요? 소스 코드를 빌드하고 컴파일 된 파일들을 node_module의 적당한 위치에 직접 복사하면 될까요? 이 때 경로는 제대로 인식이 될까요?

 

이럴 경우 npm link를 이용하면 쉽게 가능합니다. 이름에서 알 수 있듯이 npm link 명령은 특정 디렉토리에 대한 symblic link를 만들어 줍니다. npm과 관련 있는 것이니 node_modules와 관련이 있습니다. 패키지를 가져다 쓰는 프로젝트의 node_modules 하위 특정 디렉토리가 내가 작성하고 있는 패키지의 소스코드 경로를 가리키도록 합니다.

 

예들 들어 내가 작성하고 있는 foo-package 패키지가 있습니다. 이 소스의 root에서,

npm link

를 수행합니다. 이 명령으로 다음과 같이 심볼릭 링크가 만들어 졌습니다.

/Users/dexter/.nvm/versions/node/v12.20.0/lib/node_modules/foo-package -> /Users/dexter/temp/foo-package

앞의 경로는 로컬 컴퓨터의 글로벌 환경의 디렉토리이고 뒤의 경로는 작성중인 소스코드의 경로입니다.
참고로 글로벌 환경의 경로는 npm root -g 명령어로 확인할 수 있습니다.

그리고 패키지를 가져다 쓰는 bar-project의 루트에서 다음과 같이 명령을 입력합니다. foo-package는 package.json의 name에 해당하는 값입니다.

npm link foo-package

다시 결과를 보면 심볼릭 링크가 글로벌 환경을 거쳐 패키지 소스 경로를 가리키는 것을 볼 수 있습니다.

/Users/dexter/node_modules/foo-package -> /Users/dexter/.nvm/versions/node/v12.20.0/lib/node_modules/foo-package -> /Users/dexter/temp/foo-package

이제 foo-package에서 코드를 수정하고 bar-project에서 바로 가져다 쓸 수 있게 되었습니다. 😎

 

 

참고: https://flaviocopes.com/npm-local-package/

반응형