본문 바로가기
Back-End Frameworks/Node.js

8)Nodejs_ npm(패키지 메니져)_(1)

by Downy_J 2023. 7. 13.
728x90
반응형
SMALL

JS가 세상이 나오고

시간이 꽤 흘럿다

 

그리고 여러 JS 사용하는 개발자들이 생겨났고

그 사람들은 개발을 하며 모듈이라는걸 하나둘 만들어냈다

개발을 좀 더 쉽고 간편하게 하기 위해서 이 모듈이라는게 생겨난거다

그리고 그 모듈들을 공개적으로 코드를 내놨으며

그것들이 공개되있는 서버가 바로

npm 이다!

npm 사용법으론

1. 내가 모듈을 만들어 등록하는 방법

2. 누가 모듈을 만든걸 갖다 쓰는법

 

이렇게 있다

npm 말고도 Facebook 에서 내놓은 패키지 매니져도 있는데

 

얘는 주로 

같은 페북 진영의 프레임워크를 사용할적에 종종 볼 수있다

 

npm이 느리다 싶으면 yarn을 사용하면 되고

만약 사용을 하련다면

https://yarnpkg.com/

 

Home

Fast, reliable, and secure dependency management.

yarnpkg.com

가서 따로 설치를 해줘야 사용이 가능하다

 


package.js

개발을 위해 필요한 패키지들을 하나둘 다운받다 보면

한두개야 부담없지만

만약 몇백개를 갖다 쓰게된다면

이건 더이상 관리를 해주기가 참 애매하다

 

그리고 패키지 마다 호환성문제도 있고 하다보면 버전만다른 같은 패키지를 쓸때도 있는데

그걸 어떻게 일일이 구분지어 관리를 하나...

 

Node 프로젝트를 실행하기 전엔

반드시 폴더 내부에 package.js 

부터 만들고 개발에 들어가야 한다

 

그리고 npm에서 저 package.js를 생성하는 명령어를 제공한다

◆ package name : 프로젝트 명을 입력
version : 패키지의 버전 입력(npm에선 이 버전이 정말 엄중이 관리된다
description : 프로젝트 설명
entry poiont : JS 실행 파일 진입점. 보통 module.exports를 하는 파일을 지정. package.json의 main 속성에 저장됨.
test command : 코드 테스트 때 쓸 명령어를 말함. package.json scripts 속성 안의 test 속성에 저장이 됨
git repository : 깃 저장소의 저장 주소 연동. package.json의 repository 속성에 저장됨.
keywords : 키워드는 npm 공홈에서 패키지를 쉽게 찾게 해줌. package.json의 keywords 속성에 저장
license : 해당 패키지의 라이센스

 오픈소스라 해도 모든걸 제한없이 쓸수있지는 않다

라이선스별 제한이 있으며 설치전엔 반드시 라이선스를 확인 해야 한다

ISC, MIT BSD 라이센스를 갖고있는 패키지들을 쓸땐

사용한 패키지와 라이센스만 밝히면 얼마든지 쓸수 있음

 

아파치 요 라이센스 쓸땐 사용은 자유로우나 특허권에 관하여선 제한이 좀 있음

 

GPL 같은 라이센 쓸때 조심할 필요가 있음. 이 계열은 사용한 패키지를 배포 할때

내 패키지도 GPL로 배포하고 소스코드도 공개르 해야함

 

이렇게 라이센스별로 오픈소스일지라도 이리 다르므로

좀 잘 읽고 확인하고 그래 써야 함

걍 갖다 쓰면 

법적으로 문제 생길수있음.

 

무튼. . npm init 써서 만들고 나면

package.json 파일이 생성된다.

 

저기서 scripts 속성 부분은 npm 명령어를 저장하는 부분이다

저기 약속 된대로 npm run test를 쓰게되면

이런 결과가 나온다 지금은 디폴트로 뭔 에러메시지가 나오네

 

저 scripts 속성 부분에 명령어를 여러개 등록해 두고 쓸 수 있다

일반적으론 start 라는 명령어에 node 파일 하나 저장해 두고 npm start 로 서버를 가동 시킨다


npm install [ 패키지명 ]

익스프레스 라는 패키지 한번 설치해 보자

 

패키지 설치는 뭐 복잡한건 없다

npm install espress

쫘~쟌~

 

그리고

여기 dependencied 속성이 새로 생기고

아까 설치한 패키지가 등록이 된다.

이라는 폴더도 새로 생기는데 요 안에 뭐가 많이 들어있다

여기로는 패키지를 설치하면 그 패키지가 들어갈 폴더라 보면 된다

 

express 하나만 설치했을뿐인데 왜 뭐가 많지??

 

express 패키지가 의존하는 패키지들 이기 때문에!

(얘가 쟤랑 의존적이라 있어야 하고 쟤도 쨰랑도 의존적이고 머고저고...)

패키지들이 엃기섫기 의존적이라 그렇게 많은거고

그걸 다 관리하려면 복잡's 하니깐 

저기서 관리를 대신 해주는 거다

 

이 파일은 express외에도 node_modules에 들어있는 패키지들의 정확한 버전과

의존 관계가 담겨있다

 

우리가 npm으로 패키지를 설치, 수정, 삭제 시 마다 패키지간 내부 의존 관계를 저따가 저장함

 

npm install [ 패키지명 ]
   
  • cookie-parser : 요청된 쿠키를 쉽게 추출할 수 있도록 도와주는 미들웨어
  • express : Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크
  • express-session : Express 프레임워크에서 세션을 관리하기 위한 미들웨어
  • margan : http 요청과 응답이 있을때마다, 명령창에 로그로 보여주는 Node.js 패키지
  • nodemon : 소스 코드가 바뀔 때마다 자동으로 node를 재실행 해주는 패키지
  • rimraf : 리눅스나 맥의 rm -rf (파일/폴더 삭제 명령어)를 윈도우에서도 사용할 수 있게 해주는 패키지

여러 패키지 모듈을 한번에 설치 할 수도 있며

실 배포시엔 사용못하지만 아직 개발중인 개발용 패키지를 설치 할 수도 있다.

npm install --save-dev [ 패키지명 ] [ ... ]

devDependencies 속성개발용 패키지만 따로 관리 한다

 

npm install --global [ 패키지명 ]

npm에는 전역(global) 설치도 할 수 있다.

리눅스, 맥 같은 겨우 관리자권한이 필요 함으로 sudo를 붙여

sudo npm install --global [ 패키지 명]

이렇게 써줘야 한다

이렇게 전역 설치한 패키지는 package.json에는 들어가지 않는다

 

어....?

 

아싸 오류다~ 시버럴거...ㅋㅋㅋ

https://whaledowny.tistory.com/37

 

VS Code 권한 오류 문제

방금 전역 설치를 끝냈고 요 안에도 잘 들어있는데 저거 써서 폴더 하나 삭제 하려 하니 이런 에러가 뜨며 실행이 안된다 한다 이 원인은 VS Code의 터미널의 권한 문제다 윈도우 파워쉘 켜서 권한

whaledowny.tistory.com

30분 걸렸다.. 아무튼~

Befor After

삭제를 해봤다

그런데..?

여전히 잘 들어있다!

 

왜...?

뭐 드갈땐 자동인데 나갈땐 뭐 맘대로가 아님??

아니 npm uninstall [ 패키지명 ] 하면 저기서도 적용되서 지워 지던데..?

 

저기 pacakage.json은 그러니까.. 설치된 패키지들의 내역이다

내가 저거 설치 했었어~! 뭐 이런..

그래서 실수로 지워버렸어도

저거만 다시 써주면 아까 제거한 node_modules 폴더가 생성된다

깃허브로 버전 관리할때 바로 이점이 중요한데...

 

저 폴더는 커밋 해줄 필요가 없다는거

중요한건 pacakage.json 이다


npx

Global(전역) 설치를 싫어 하는 사람들도 있다

나도 사실 글로벌 설치는 선호하지 않는편인데..

 

예전에 Python으로 뭐 만지작 거릴때

가상환경 virtual_env 만들어서 썻던 기억이 있어

그런듯 하다

그리고 충돌의 위험이 읎잖아 이러면

 

그리고 저기 pacakage.json에 기록이 안되니까

뭐 다시 설치같은걸 할때 좀 어려움도 있다

그때 저걸 쓴다

이거 아까 했던거 위에서..

그리고

이러면 된다

그니깐...당근

여기도 생겼고~?

아.. 그대로 있구나?

이거 그럼 뭐야... 같은걸 글로벌이랑 pacakage.json에다가 둘다 넣은..건가?

음.. 이게 뭔 소용인지 모르겠네

 

전역 설치 대신 npx를 써서 설치를 한다는건

전역 설치한것과 같은 효과를 얻으며 패키지 내역에도 기록되서

버전관리 하기도 용의하다 이런거지 이게..?

 

728x90