노드 패키지 매니저 (npm)

gdhi·2024년 1월 10일

Node.js

목록 보기
4/7
post-thumbnail

코드들이 공개되어 있는 서버. 의존성이라고 보면 된다









📖npm 알아보기

npmNode Package Manager의 약자이다. 초반에 노드가 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있다고 했었는데. 대부분의 자바스크립트 프로그램은 패키지로 npm에 등록되어 있어, 필요한 패키지가 있다면 npm에서 찾아서 설치하면 된다.

npm에는 2022년 4월 기준으로 193만 개 이상의 패키지가 등록되어 있다. 이는 세계에서 가장 큰 패키지 저장소 중 하나이다. 방대한 양의 패키지들은 노드와 자바스크립트의 생태계를 더욱 견고하게 만들어주며, 대부분이 오픈 소스로 제공되어 웹 개발 시에 큰 도움이 된다.

npm에 업로드된 노드 모듈패키지라고 부르며, 모듈이 다른 모듈을 사용할 수 있는 것처럼, 패키지도 다른 패키지를 활용할 수 있다. 이런 관계를 의존 관계라고 한다.

yarn, pnpm

npm의 대안으로 yarn(https://yarnpkg.com)pnpm(https://pnpm.io)이 있다. yarn페이스북에서 제공하는 패키지 매니저로, 주로 리액트(React)리액트 네이티브(React Native) 등 페이스북 생태계의 프레임워크를 사용할 때 자주 사용된다. 반면 pnpmnpm의 성능을 향상시킨 패키지 매니저이다. 하지만 웬만해서는 npm에 다 있고 npm 사용법을 잘 알고 있다면 사용하는데에 어렵진 않다.









📖pakage.json으로 패키지 관리하기

서비스에 필요한 패키지를 하나씩 추가하다 보면 어느샌가 패키지 수가 100개를 훌쩍 넘어버리게 된다. 그리고 사용할 패키지는 각자 고유한 버전이 있으므로 어딘가에 기록해두어야 한다. 같은 패키지라도 버전별로 기능이 다를 수 있으므로 프로젝트를 설치할 때 패키지도 동일한 버전을 설치하지 않으면 문제가 생길 수 있다. 이때 설치한 패키지의 버전을 관리하는 파일이 바로 package.json이다.

그러므로 노드 프로젝트를 시작하기 전에는 폴더 내부에 반드시 package.json을 만들고 시작해야 한다. npmpackage.json을 만드는 명령어를 제공한다

속성설명저장 위치
package name패키지의 이름package.jsonname 속성
version패키지의 버전package.jsonversion 속성
entry point자바스크립트 실행 파일 진입점package.jsonmain 속성
test command코드를 테스트할 때 입력할 명령어package.json scripts 속성의 test 속성
git repository코드를 저장해둔 깃(Git) 저장소 주소package.jsonrepository 속성
keywords패키지를 쉽게 찾을 수 있도록 하는 키워드package.jsonkeywords 속성
license해당 패키지의 라이선스package.jsonlicense 속성

라이선스(license)

오픈 소스라고 해서 모든 패키지를 아무런 제약 없이 사용할 수 있는 것은 아니다. 라이선스(license)별로 제한 사항이 있으므로 설치 전에 반드시 라이선스를 확인해야 한다.

ISC, MIT나 BSD 라이선스를 가진 패키지는 사용한 패키지와 라이선스만 밝히면 자유롭게 사용할 수 있다.

아파치(Apache) 라이선스 패키지는 사용은 자유롭지만 특허권에 대한 제한이 포함되어 있다.

GPL 라이선스 패키지를 사용할 때는 조심해야 한다. GPL 계열의 패키지를 사용한 패키지를 배포할 때는 자신의 패키지도 GPL로 배포하고 소스 코드도 공개해야 하기 때문이다.

라이선스별로 특징이 다르므로 오픈 소스를 사용하기 전에는 반드시 라이선스를 확인하고 세부 내용을 읽어보기를 권한다. 그렇지 않으면 이후 상용 프로그램을 개발했을 때 법적 문제가 생길 수 있다.

npm 설치

새 폴더 생성 후 이동해서 실행

$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

    See `npm help json` for definitive documentation on these fields
and exactly what they do.

    Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

    Press ^ C at any time to quit.
package name: (폴더명)[프로젝트 이름 입력]
version: (1.0.0)[프로젝트 버전 입력]
description: [프로젝트 설명 입력]
entry point: index.js
test command: [엔터 키 클릭]
git repository: [엔터 키 클릭]
keywords: [엔터 키 클릭]
author: [여러분의 이름 입력]
license: (ISC)[엔터 키 클릭]
About to write to C: \Users\zerocho
pmtest\package.json:

{
    "name": "npmtest",
        "version": "0.0.1",
            "description": "hello package.json",
                "main": "index.js",
                    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "ZeroCho",
        "license": "ISC"
}

Is this ok ? (yes) yes



📌여러가지 해보기


👉 package-lock.json 은 건들면 안된다. 알아서 생기는 녀석

👉 패키지들이 많이 설치 됨

👉 express 도 있다



👉 개발할 때만 사용하고 배포하면 사라지는 개발용 패키지


👉 --global 은 전체에서 사용이 가능

👉 전역은 pakage.json에 기록이 되지 않는다

👉 node_modules 폴더가 삭제됐다. 지정한 파일이나 폴더를 지우는 명령어다.

❗ 실행되지 않는다면 npx rimraf node_modules로 실행


👉 다시 생긴 node_modules 폴더










📖패키지 버전 이해하기

노드 패키지들의 버전은 항상 세 자리로 이뤄져 있다. 이는 Semantic Versioning(유의적 버전)의 원칙을 따른 것이다. 각 버전의 첫 번째 자리는 메이저(major) 버전으로, 하위 호환성이 깨질 정도의 큰 변화가 있을 때 올린다. 두 번째 자리는 마이너(minor) 버전으로, 하위 호환성이 유지되는 새로운 기능이 추가될 때 올린다. 세 번째 자리는 패치(patch) 버전으로, 기존 기능에 대한 버그 수정이나 작은 개선이 있을 때 올린다.

이렇게 버전을 구분하면 다른 패키지를 사용할 때 버전만으로도 어떤 종류의 변경이 있는지 쉽게 파악할 수 있다. 또한, 버전 앞에 붙는 ^나 ~와 같은 문자들은 설치 또는 업데이트 시 어떤 범위의 버전을 선택할지 알려준다.

예를 들어, ^1.1.11.1.1 이상부터 2.0.0 미만 버전까지를 의미하며, ~1.1.11.1.1 이상부터 1.2.0 미만 버전까지를 의미한다. 이러한 규칙을 따르면 패키지 간의 의존성과 버전 충돌을 최소화할 수 있다.

하지만 주의할 점은 배포된 버전 내용은 수정하면 안 되며, 수정이 필요한 경우 메이저, 마이너, 패치 버전 중 하나를 올려 새로운 버전으로 배포해야 한다. 이를 통해 패키지 간 의존 관계를 유지하고 일관된 동작을 보장할 수 있다.









📖기타 npm 명령어, 패키지 배포

책 참조. 별 내용 없음

0개의 댓글