[Nodejs] node_modules의 .bin폴더의 정체

심재철
3 min readFeb 16, 2020

패키지 안에는 .bin이라고하는 숨김 폴더가 존재한다. 이 폴더는 뭐때매 있는건지 궁금해서 찾아보았다.

.bin

이 폴더는 이름에서도 유추할수있다시피 바이너리 파일들이 저장되는 곳이다. (바이너리 파일이란 1과 0으로만 이루어진 파일이다.)

모듈을 npm install로 설치하고나서 node [방금 설치한 모듈] 를 입력해서 노드로 그 모듈을 실행 할 수도있지만, package.json에 scripts에 적힌 스크립트를 통해서 바로 모듈을 실행시킬수있다.

node명령어와 npm scripts의 차이

npm install을 통해 설치한 노드 모듈을 살펴보면 js 파일들로 가득하다. node라는것은 결국 자바스크립트 실행기이므로 node명령어로 이 node_modules아래에 있는 외부 모듈을 실행 시킬 수 있다.

또 다른 방법으로, npm scripts를 통해서 외부 모듈을 실행시킬 수 있다. 이 방법으로 모듈을 실행시킨다는것은 node_modules/.bin 폴더에 있는 실행파일을 직접 실행하는것이다. 실행파일은 0과 1로 구성된 바이너리 파일이므로 그 자체로 실행이 가능하다. node가 필요하지 않다.

예시

pm2라고 하는 모듈을 로컬로 설치해보자.(글로벌 설치 X )

pm2 index.js

이 pm2모듈은 index.js를 사용한다. 로컬 설치기 때문에 위 처럼 터미널에서 pm2모듈을 실행시키려고하면 에러가 난다. (운영체제 환경변수에 등록되지 않아서 운영체제가 해당 pm2 파일이 어디에 있는지 못찾는다.) package.jsonscripts부분에 다음과 같은 npm 스크립트를 적어주자.

"start" : "pm2 index.js"

이 pm2는 다음 두가지 방법으로 실행시킬 수 있다.

node node_modules/pm2/bin/pm2.js index.js

이 방법은 node를 통해서 자바스크립트 자체를 실행한것이고,

npm run start

이 방법은 npm install할때 nodemodules/.bin폴더에 생성된 pm2의 실행파일을 npm이 바로 실행시켜주는 방법이다. 즉 npm은 npm run start라는 명령어가 입력되면 `nodemodules/.bin/pm2` 실행파일을 실행시킨다.

또다른 예시

예를 들어 다음과 같이 nodemon을 설치했다고 해보자.

npm install nodemon

이때 다음과 같은 일들이 벌어진다.

  1. 모듈을 node_modules/nodemon에 설치한다.
  2. 모듈을 바이너리로 컴파일한다.
  3. 바이너리 파일을 node_modules/.bin에 복사한다.

위에서 nodemon을 -g 옵션으로 설치하지 않았기 때문에 터미널에서 nodemon을 바로 사용할 수 없다. 하지만 npm script를 통해서 nodemonnpm이 대신 실행하게 해줄 수 있다 이때 nodemon의 바이너리 파일이 실행된다.

--

--