1. 개요
이전에 nodemon 라이브러리를 사용하면서 한 가지 의문이 들었다.
우리는 nodemon과 eslint와 같은 라이브러리를 사용할 때 npm과 yarn과 같은 패키지 관리자로 실행할 수 있도록 package.json script에 설치한 라이브러리를 설정해왔다.
그럼 우리는 왜 script에 명령어를 설정해 왔던 걸까? 명령어를 짧게 쓰려고??
2. 실행 경로의 차이
nodemon을 예로 간단한 테스트를 해보겠다.
먼저 nodemon을 package.json이 있는 경로에서 설치 해본다.
npm i nodemon
이제 터미널에서 nodemon을 실행해보자!
nodemon app.js
나는 방금 nodemon을 설치했는데 nodemon 파일을 찾을 수 없다는 에러 메시지가 출력된다.
에러 메시지의 경로를 보면 /url/local/bin/에서 nodemon을 찾는 걸 알 수 있다.
패키지 관리자 (npm, yarn)는 라이브러리를 설치할 때 --global 옵션을 주지 않으면 기본적으로./node_modules에 라이브러리를 설치한다
./node_modules는 PATH로 설정이 되어 있지 않기 때문에 nodemon 실행 파일을 찾을 수 없던 것이다.
그럼 이번에는 nodemon 명령어를 package.json script에 설정하고 실행해보자!
"scripts": {
"dev": "nodemon app.js",
},
위에서와 다르게 정상적으로 nodemon이 실행되는 걸 확인할 수 있다.
우리는 여기서 패키지 관리자로 실행한 명령어는./node_modules를 먼저 참조한다는 것을 유추할 수 있다.
경로를 확실히 알기 위해서 특정 명령어의 위치를 찾아주는 which 명령어를 사용해보자!
먼저 nodemon을 --global 옵션으로 이전 버전을 설치해서 테스트한다.
npm --global i nodemon@2.0.16
which nodemon
어라 아까 nodemon을 찾을 수 없다던 /url/local/bin/ 디렉터리에 nodemon이 설치된 걸 확인할 수 있다.
nodemon을 터미널에서 직접 실행하면 글로벌 명령어로 설치한 2.0.16 버전이 실행되었다.
그러면 로컬로 설치한 nodemon은 ./node_modules에 잘 설치되었는지 확인해 보자!
which 명령어는 설정된 PATH를 조회하기 때문에 ./node_modules를 조회하기 위해서는 package.json script에 설정해줄 필요가 있다.
"scripts": {
"dev": "nodemon app.js",
"which": "which nodemon"
},
명령어를 실행하면 ./node_modules에 nodemon이 설치되어 있는 걸 확인할 수 있다.
패키지 관리자로 실행한 명령어는 22.06.24 기준 최신 버전인 2.0.18 버전으로 실행된 걸 확인할 수 있다.
3. 결론
package.json script에 명령어를 설정하는 이유는 로컬로 ./node_modules에 설치된 실행 파일을 실행할 수 있도록 하기 위함이다.
지금까지 그냥 짧은 명령어로 실행하려고 설정하는 줄만 알았던 지난날의 나를 반성한다...
'node.js' 카테고리의 다른 글
[node.js] 객체지향 프로그래밍이란? (Typescript) (0) | 2022.08.09 |
---|---|
[node.js] nvm으로 프로젝트별 node version 관리하기 (0) | 2022.07.07 |
[node.js] node.js + typescript 실행환경 세팅하기 (0) | 2022.06.23 |
[Node.js] grpc 통신 WebSocket POST Request 방법 (0) | 2022.03.08 |
[node.js] node 최신 버전 업그레이드 및 버전 변경 (nvm) (0) | 2021.12.31 |