# [node]패키지 매니저 npm , 사용해보자

2025. 1. 10. 18:32개발/Node

4.1 npm 소개

node pacakge manager , node.js 설치시 함께 설치됨.
2022 년 기준 세상에서 가장많은수의 패키지 등록 되어있음.(압도적)
java의 maven, .NET NuGet, 파이썬 PyP
https:/

4.2 패키지와 모듈

패키지 : package.json 으로 정의한 파일 또는 디렉터리( 코드뭉치)
모듈 : node_module 디렉터리 아래 있는 파일또는 디렉터리, 모듈내 파일이나 디렉터리는 require() 함수로 읽을 수 있음.

  • node_modules 에는 npm install 로 설치한 패키지가 저장됨.
  • 모든 패키지는 모듈이다.
  • npm에 등록하지 않아도 패키지 포맷만 맞으면 npm install 로 설치 가능. package 배포가 가능.
  • require() 함수 사용시 module.path 에 있는 경로를따라서 모듈을 찾음.
    cd chapter4
    mkdir sample-package
    cd sample-package
    node
    > module.paths
  • module.path 는 있지도 않는 경로까지 다잡음. import 에 굉장히 많은 I/O 를 수행함.

CommonJS : 브라우저뿐만아니라 서버에서도 모듈 기능 제공하기 위해 나온 모듈 규약. node.js 기본값으로 사용.

4.3 package.json 파일을 만들기
(1) package.json 파일 만들기

vi package.json
{
    "name": "sample-package",
    "version": "1.0.0",
    "description" : "",
    "main":"index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC"
}

(2) index.js 파일 만들기

console.log("require 로 부르면 실행됩니다 ");
module.exports = { // 외부로 노출할 객체를 저장. 
    add: (a,b) => a+b,
    sub: (a,b) => a-b,
    multi: (a,b) => a*b,
    div : (a,b) => a/b
}
  • require 로 모듈을 읽을때 파일을위애서부터 읽음.
  • module.exports 는 require를 사용해 불러왔을때 반환하는 객체를 저장하는 변수
  • module 은 현재 모듈을 의미. 기본값은 비어있음.
const calc = require("sample-package");
const a = 17;
const b = 3 ;
console.log("a+b =", calc.add(a,b));
console.log("a-b =", calc.sub(a,b));
console.log("a*b =", calc.multi(a,b));
console.log("a/b =", calc.div(a,b));

package 작성후 모듈을 사용 결과

  • npm login, npm publish 를 사용하면 배포도 가능.
  • npm init 하면 name,version, description, script 모듈이 자동 생성.(자주 이용)
  • dependencies 와 devDependecies 를 많이 사용함.
  • package.json 항목중 name(프로젝트 명) 과 version(프로젝트 버전) 은 필수.

4.4.1 패키지 설치 하기

npm install [<@scope>/]<name>@<tag/version/version range>
# [<@scope>/]: 패키지 스쿠프(일종의 네임 스페이스 )
# <name> : 패키지 명 
# <tag/version/version range>태그/버전 버전범위

npm install lodash@latest
npm install lodash@4.17.21
npm install lodash@">=4.17.0 <4.20.0"
npm install jest -D #개발 환경에서만 사용하는 패키지 
npm install <git 저장소 주소> 
npm install http://github.com/lodash/lodash
  • jest 는 가장 많이 사용하는 테스트 패키지 중 하나임.
  • package.json > devDependecies 에 jest 추가됨.
  • npm install 만 해도
    • npm-shrinkwrap.json
    • package-lock.json
    • yarn.lock 순위로 패키지가 설치된다.
  • git 저장소 url 을 설정해 설치 하는 방법

4.4.2 패키지 업데이트

npm update [-g][패키지명1, 패키지명2 ,... 패키지명 N]
npm up 
npm upgrade

-g sms node 가 설치 되어있는 디렉터리의 의존성 패키지를 업데이트 함.

4.4.3 패키지 확인 , 삭제

npm ls
npm list
npm la
npm ll
npm ls -depth # 패키지 의존성 확인 

npm uninstall [@scope/] package 명[@버전] [-S|--save|-D|--save-dev|--save-optional]
npm remove
npm rm 
npm r
npm un
npm unlink

npm uninstall express --save

4.5 스크립트 기능과 NPX

  • start, stop, build, deploy, test 등의 명령어를 매번 입력 안해도됨.
  • package.json 에 정의 함.

4.5.1 스크립트 파일 정의

cd chapter4
mkdir test-scripts
cd test-scripts
vi package.json
{
    "name": "test-scripts",
    "version": "1.0.0",
    "scripts": {
        "prehello": "echo 'PRE HELLO'",
        "hello": "echo 'hello Node.js'",
        "posthello": "echo 'POST HELLO'",
        "test" : "echo 'test Node.js'",
        "stop" : "echo 'stop Node.js'",
        "start": "echo 'start Node.js'",
        "restart": "echo 'restart Node.js'"
    }
}
npm run hello
npm run test
npm run start

scripts 에 hello 로 등록된 명령이 실행됨!
prehello, posthello 등으로 실행 전과 후에 실행될 스크립트도 지정 할수 있음.
terminal 에서 hello 만 입력해도 pre -> hello -> post 수능로 결과가 나온다.

4.5.2 NPX로 코드 포매팅 명려어 prettier 실행

NPX : Node package eXecute

npm 단점을 상쇄하기 위해 yarn2 를 사용하자.

mkdir test-yarn
cd test-yarn 
npm install -g corepack  # corepack : npm 이외에 패키지 매니저를 사용하는 기능, yarn, pnpm 을 지원. 
corepack enable  # corepack 활성화 
yarn init -2 # yarn 초기화 

.editorconfig, .git, .gitignore, .yarn , .yarnrc.yml, README.md, package.json, yarn.lock 파일이 생성됨.

yarn add chalk # chalk 설치 
vi main.js
import chalk from "chalk";
console.log(chalk.blue("안녕하세요!"));

yarn node main.js
## >> import error : ES module 을 사용했기에 !.  
vi pacakage.json
{
    "name" : "test-yarn",
    "packageManager": "yarn@4.0.1",
    "dependencies": {
        "chalk": "^5.0.0"
    },
    "scripts": {},
    "type": "module" // type 을 module 로 설정 


}
yarn node main.js 
# >> imports 를 yarn2 에서 지원 하지 않음. 
# yarn imports r가 ㅣㅈ워지 고 dependencies 에 ansi-style과 supports-color 가 추가된 버전 설치 
yarn add chalk@https://github.com/wapj/chalk

yarn2 설치

add chalk 후 파란색 글자 보임.

npm 개발자에게 높은 자유도를 제공해 대중화 성공 개발과 배포 테스트 어려움. yarn2 제로 인스톨 전략과 함께 사용하면 효과적