-
노드 node_modules 와 npx, SemVer노드 2023. 4. 14. 15:16
node_modules
npm install 시 node_modules 폴더가 생성된다.
- 내부에 설치한 패키지들이 들어 있다.
- express 외에도 express와 의존 관계가 있는 패키지들이 모두 설치된다.
설명을 하자면 express를 설치를 하면 express도 node 프로젝트이고 npm패키지니까 express만의 dependencies가 있을 것이다. 그래서 npm i express 하면 express의 dependencies 까지 모두 같이 설치가 되는 것이다 .
즉, 패키지를 설치하면 그 패키지의 dependencies까지 모두 설치가 된다.
*지금은 자세히 알 필요는 없지만 실제로 배포할 때는 node_modules는 지우고 package.json, package-lock.json만 가지고 배포한다. 이유는 node_modules는 너무 용량을 많이 차지하기 때문이다.
*npm i -g [패키지 이름]
-g는 전역으로(글로벌) 설치를 하겠다~라는 옵션이다. 이렇게 설치된 패키지는 dependencies에 추가가 되지 않는다. 따라서 다른 사람이 봤을때 프로젝트에 전역으로 설치된 패키지들의 존재를 모를 가능성이 매우 커질 수 있다는 것이다.
그래서 요즘에는 전역 설치를 지양하고 있다. 아니면 개발용으로만 -D 설치를 한다.
글로벌(전역) 패키지만 다시 정리하자면 다음과 같다
npm install --gloabl 패키지명 또는 npm i -g 패키지명
- 모든 프로젝트와 콘솔에서 패키지를 사용할 수 있다.
- npx로 글로벌 설치 없이 글로벌 명령어 사용 가능
{ "name": "npmtest", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Pocarl", "license": "MIT", "dependencies": { "body-parser": "^1.20.2", "cookie-parser": "^1.4.6", "express": "^4.18.2" }, "devDependencies": { "nodemon": "^2.0.22" } }
콘솔에 npm i -g rimraf를 입력하면 rimraf가 설치가 되지만 dependencies에는 추가가 되지 않는 것을 확인 할 수 있다.
rimraf node_modules 하면 rimraf를 전역으로 설치했기 때문에 콘솔에서 명령어처럼 사용이 가능해서 node_modules를 삭제할 수 있다.
그리고 전역으로 설치 하지 않아도 npx rimraf node_modules 하면 전역 설치를 하지 않았어도 node_modules를 삭제할 수 있다.
SemVer 버저닝
노드 패키지의 버전은 SemVer(유의적 버저닝) 방식을 따른다.
- Major(주 버전), Minor(부 버전), Patch(수 버전)
- 노드에서는 배포를 할 때 항상 버전을 올려야 한다.
- Major는 하위 버전과 호환되지 않은 수정 사항이 생겼을 때 올린다.
- Minor는 하위 버전과 호환되는 수정 사항이 생겼을 때 올린다.
- Patch는 기능에 버그를 해결했을 때 올린다.
첫 번째 자리가 바뀌면 프로그램이 동작을 하지 않을 수 있다.
첫 번째 자리가 변했다 라고 한다면 그건 대대적인 수정이 있어서 기존 코드가 돌아가지 않는다는 뜻이다.
두 번째 자리가 변하는 기준은 무언가 수정은 생겼는데 기존 코드를 가지고 있었던 사람이 안심해도 올려도 될 때이다.
세 번째 자리는 마이너한 버그수정을 했을 때 변한다.
노드 패키지에서는 코드에서 한 글자만 바꿔도 버전의 숫자를 올려야 한다. 그런데 어떤 자리의 숫자를 올려야 하는지는 위에서 설명한 유의적 버저닝을 따라서 올리면 된다.
버전 기호 사용하기
버전 앞에 기호를 붙여 의미를 더한다.
- ^1.1.1 : 패키지 업데이트 시 minor 버전까지만 업데이트 됨(2.0.0 버전은 안 됨)
- ~1.1.1 : 패키지 업데이트 시 patch 버전까지만 업데이트 됨(1.2.0 버전은 안 됨)
- >=,<=, >, <는 이상, 이하, 초과, 미만 을 의미한다.
- @latest는 최신을 의미한다.
- @next로 가장 최신 배포판 사용 가능(불안정함)
- 알파/베타/RC 버전이 존재할 수도 있다.(1.1.1 -alpha.0, 2.0.0-beta.1, 2.0.0-rc.0)
살짝 풀어서 설명을 하자면...
dependencies에서 "express" : "^4.1 이렇게 되어 있다면 major는 고정하겠다 라는 뜻이다.
~를 사용한다면 minor자리까지 고정하겠다는 뜻이다.
만약 express 버전이 1.1.1 이라고 한다면 그건 3번째 자리까지 고정하겠다는 뜻이다.
npm i express@lastest 하면 최신판을 설치하겠다는 뜻이다.
npm i express@3 하면 3버전을 설치하겠다는 뜻이다.
'노드' 카테고리의 다른 글
npm 배포하기 (0) 2023.04.14 노드 npm 명령어 (1) 2023.04.14 npm (0) 2023.04.14 노드 클러스터 cluster (0) 2023.04.14 노드 https, http2 (0) 2023.04.14