pakage.json, pakage-lock.json 파일들.. 모듈..
많이 보고 들었지만 누군가 그게 뭐야? 라고 물었을 때 설명을 잘 할 수 없을 것 같았는데 이번 강의를 들으면서 뿌옇던 것이 조금 정리된 느낌이 든다.
패키지.json 파일 역시 버전 정보가 들어있다는 것은 알고 있었지만 두 파일의 명확한 차이가 무엇인지 잘 몰랐는데 이번에 강의를 들으면서 명확하게 알 수 있었다. 역시 개발 공부는 끝이 없고 알아야 할 것이 정말 많구나 또 한번 느낀다. 오늘도 바보벌레는 열심히..
모듈이란?
하나의 파일에 많은 코드를 작성하게 되면 각 코드들의 의미를 빠르게 파악하기 어렵고, 수정이 필요한 부분을 찾기가 어렵다. 그래서 많은 코드가 필요한 프로그램을 기능별로 여러 개의 파일로 분리해서 관리하는 것을 모듈화(Modularization) 이라고 부르고, 기능별로 나눠진 각 파일을 모듈(Module) 이라고 부른다.
모듈화의 장점
- 코드를 효율적으로 관리할 수 있음
- 다른 프로그램에서 재사용 가능
- 이미 만들어진 모듈도 많음
인터넷에는 어떤 개발자 혹은 회사들이 이미 만들어 둔 자바스크립트 모듈들이 많은데, 이것을 제 3자가 만들었다고 해서 서드파티 모듈이(Third Party Module) 라고 부르고 이 모듈들을 사용해서 더 빠르고 완성도 있는 개발을 할 수 있다.
- node_modules
서드 파티 모듈을 설치하면 node_modules, pakage.json, pakage-lock.json 이라는 폴더/파일들이 생겨난다.
여기서 node_modules 는 설치한 모듈이 저장되는 곳이다.
- pakage.json
현재 패키지에 대한 정보가 기록되어 있는 곳이다.
- "dependencies" 라는 필드는 패키지에 필요한 서드파티 모듈의 목록
- "type" 필드는 패키지 안에서 사용할 모듈 시스템을 정함
- "scripts" 필드는 "키":"node 실제 실행할 파일명" 을 넣어주면 터미널에서 <npm run 키> 라는 커맨드를 사용할 수 있음
"scripts": {
"start": "node main.js"
"test": "node test.js"
}
참고로 start / restart / stop / test 커맨드는 run 을 쓰지 않고 npm start / npm restart / npm stop / npm test 와 같이 run 을 뒤에 붙이지 않아도 사용할 수 있지만, 그 외의 키워드들을 npm 뒤에 꼭 run 을 붙여 사용해야 한다.
- pakage-lock.json
pakage.json 파일에는 내가 설치한 패키지와 버전 범위만 기록되어 있지만, pakage-lock.json 에는 내가 설치한 패키지와 dependency 로 설치된 패키지들과 각 패키지의 버전이 정확하게 기록되어 있다.
그렇다면 이 파일은 왜 필요할까?
node js 환경에서 협업을 할 때는 보통 만들고 있는 패키지를 공유한다. 이때 node_modules 패키지는 용량이 너무 커서 공유하지 않고, 대신 pakage-lock.json 파일을 공유한다. pakage.json 파일을 공유 받으면 공유 받은 사람은 dependencies 필드를 이용해서 필요한 패키지 들을 설치할 수 있다. 공유 받은 사람은 소스코드와 pakage.json 파일을 공유 받은 후, 해당 디렉토리에서 터미널을 열고 npm install 을 하면 필요한 모든 패키지를 설치할 수 있다.
하지만, 여기서 문제는 pakage.json 파일에는 dependencies 필드에는 정확한 버전을 쓰기도 하지만, 보통 버전의 범위를 쓰기 때문에 공유를 한 사람과 공유 받은 사람의 버전이 조금씩 다를 수 있다. 그래서 모든 패키지의 정확한 버전 정보가 들어있는 pakage-lock.json 파일이 필요하다. pakage-lock.json 파일까지 있는 상태에서 npm install 을 하면 공유한 사람과 공유 받은 사람이 패키지 버전이 똑같아 지기 때문에 완전히 같은 환경에서 개발할 수 있게 된다. 그래서 완전히 같은 상태에서 개발을 해야 한다면 pakage.json, pakage-lock.json 파일을 모두 공유하는 것이 좋다.
알아두면 유용한 npm 커맨드
npm install (또는 npm i)
npm install pakage_name
패키지 이름 뒤에 @version 을 붙이면 특정 버전을 설치할 수 있다.
npm install pakage_name@version
--global (또는 -g)
global 은 보통 '전역' 이라는 뜻으로 쓰이며, 이 옵션을 사용하여 설치한 패키지는 패키지를 설치한 디렉토리가 아니어도 어디서든 사용할 수 있다.
또 패키지 중에서 import 하지 않고 커맨드 라인에서 사용하는 것들이 있는데, 이런 패키지들은 보통 --global 옵션으로 설치를 한다.
npm install pakage_name --global
예를 들어 nodemon 이라는 패키지를 설치하면 아래와 같이 node 대신 nodemon 이라는 커맨드로 프로그램을 실행할 수 있다.
nodemon main.mjs
이렇게 프로그램을 실행하면 코드에 변화가 있을 경우 nodemon 이 자동으로 프로그램을 재실행 해준다. 커맨드 라인에서 사용하는 패키지는 일반 설치를 하면 제대로 작동하지 않을 수 있으니, 패키지 공식 문서 설치 가이드를 꼭 참고하도록 하자.
--save-dev (-D)
특정 패키지는 소프트웨어를 개발할 때는 필요하지만 소프트웨어를 배포할 때는 필요하지 않다. (ex. 테스팅툴, 디버깅툴) 이런 패키지들을 설치할 때는 --save-dev 옵션을 사용하는 것이 좋다.
npm install pakage_name --save-dev
--save-dev 옵션을 사용하면 설치한 패키지가 pakage.json 의 dependencies 필드에 기록되지 않고 devDependencies 라는 필드에 기록된다. 나중에 소프트웨어를 배포할 때 npm install --production 커맨드를 사용하거나 환경 변수를 통해 Node.js 환경을 production 으로 설정한다면 devDenpendencies 에 있는 패키지들은 설치되지 않는다.
npm list (또는 npm ls)
현재 디렉토리 안에 설치된 패키지 목록을 보여준다. -g 옵션을 사용하면 전역 설치된 패키지 목록을 볼 수 있다.
npm list
npm list -g
npm update (또는 npm up)
npm update pakage_name
패키지를 가장 최신 버전으로 업데이트한다. 이때 dependencies 필드에 명시된 허용 범위 내에서 업데이트를 하고 패키지 이름을 생략하면 현재 디렉토리에 있는 모든 패키지를 업데이트 한다.
npm update
npm update pakage_name
// 모든 전역 패키지 업데이트
npm update -g
// 전역패키지 pakage_name 업데이트
npm update -g pakage_name
npm uninstall (또는 npm un)
설치된 패키지를 제거한다.
npm uninstall pakage_name
npm uninstall -g pakage_name
📖 References 📖
코드잇 자바스크립트 모듈 강의
'웹 > JavaScript' 카테고리의 다른 글
[JavaScript] 기초 - 데이터와 형태 (0) | 2024.07.29 |
---|---|
Promise 객체 (0) | 2024.05.27 |
JS 배열 Array (0) | 2024.01.05 |
JS Date 객체 (1) | 2024.01.05 |
JS 객체와 속성 (0) | 2024.01.04 |