📦
Node 입문
심화 · 선수: 24_Node_환경
25. npm 입문
프로젝트의 명함이자 설정 파일. 의존성, 스크립트, 메타정보를 담습니다.
npmpackage.jsonscriptsCLI
소요 시간
⏱ 약 1.5시간
난이도
📊 중급
선수 조건
🎯 단원 24
결과물
프로젝트의 명함이자 설정 파일. 의존성, 스크립트, 메타정보를 담습니다.
이 강의에서 배우는 것
- 1`package.json`의 역할을 이해한다.
- 2`npm init`, `npm install`, `npm run`을 사용한다.
- 3외부 패키지를 설치해 활용한다.
- 4`bin` 필드로 간단한 CLI를 만든다.
소개
프로젝트의 명함이자 설정 파일. 의존성, 스크립트, 메타정보를 담습니다.
핵심 개념
1. package.json
프로젝트의 명함이자 설정 파일. 의존성, 스크립트, 메타정보를 담습니다.
bash
npm init -y최소 형태:
json
{
"name": "my-app",
"version": "1.0.0",
"type": "module"
}`"type": "module"`을 추가하면 `.js`도 ESM으로 동작합니다.
2. scripts
자주 쓰는 명령을 별칭으로 등록합니다.
json
{
"scripts": {
"start": "node index.js",
"hello": "node -e \"console.log('hi')\""
}
}실행:
bash
npm start
npm run hello`start`, `test` 등은 `run` 없이 실행됩니다.
3. dependencies
bash
npm install chalk@5`node_modules/`에 설치되고 `package.json`의 `dependencies`에 추가됩니다.
javascript
import chalk from 'chalk';
console.log(chalk.green('성공!'));개발용 도구는 `--save-dev` (또는 `-D`).
4. CLI 만들기 (`bin`)
json
{
"bin": { "greet": "./bin/greet.js" }
}`bin/greet.js` 첫 줄에 shebang:
javascript
#!/usr/bin/env node
console.log('hi', process.argv[2] ?? 'world');`npm link` 후 터미널에서 `greet 홍길동` 가능.
핵심 예제
| 폴더 | 다루는 내용 |
|---|---|
| 01_init/ | 최소 package.json |
| 02_scripts/ | npm scripts |
| 03_dependency/ | 외부 패키지(chalk) |
| 04_cli/ | bin 필드로 CLI 만들기 |
각 폴더에서 `npm install` 후 실행합니다.
src/01_init/package.json
json
{
"name": "init-demo",
"version": "1.0.0",
"description": "npm init 최소 예제",
"type": "module",
"license": "MIT"
}
src/02_scripts/index.js
javascript
/**
* npm start로 실행되는 진입점
*/
console.log('start 스크립트로 실행됨!');
console.log('현재 시각:', new Date().toLocaleString('ko-KR'));
src/02_scripts/package.json
json
{
"name": "scripts-demo",
"version": "1.0.0",
"type": "module",
"scripts": {
"start": "node index.js",
"hello": "node -e \"console.log('Hello from npm script')\""
}
}
src/03_dependency/index.js
javascript
/**
* chalk 패키지 사용 예제
* 먼저: npm install
* 실행: npm start
*/
import chalk from 'chalk';
console.log(chalk.green('성공 메시지'));
console.log(chalk.red.bold('빨간 굵은 글씨'));
console.log(chalk.blue('파란 글씨'), chalk.yellow('노란 글씨'));
src/03_dependency/package.json
json
{
"name": "dependency-demo",
"version": "1.0.0",
"type": "module",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"chalk": "^5.3.0"
}
}
src/04_cli/bin/greet.js
javascript
#!/usr/bin/env node
/**
* 간단한 CLI: greet 홍길동
* 설치 테스트: 이 폴더에서 npm link 후 터미널에서 greet 이름
*/
const name = process.argv[2] ?? 'world';
console.log(`안녕하세요, ${name}님!`);
src/04_cli/package.json
json
{
"name": "greet-cli",
"version": "1.0.0",
"type": "module",
"bin": {
"greet": "./bin/greet.js"
}
}
자주 하는 실수
- `node_modules`를 git에 커밋.
- `package-lock.json`을 무시 — 버전 고정 보장이 깨짐.
- `^`, `~` 의미 혼동 (`^5.0.0`은 5.x 허용).
- ESM에서 `"type":"module"` 누락 → `import` SyntaxError.
- CLI shebang `#!/usr/bin/env node`를 빼먹어 직접 실행 불가.
FAQ
Q1. yarn/pnpm은?
대체 패키지 매니저. 기본은 npm으로 익히면 됩니다. **Q2. 전역 설치는 언제?** A. CLI 도구 정도. 프로젝트 의존성은 로컬 설치. **Q3. 의존성을 지우려면?** A. `npm uninstall <패키지>`.
과제
이름을 입력받아 인사하는 CLI를 만드세요.
homework/README.md
## 과제 1 — 인사 CLI `readline`으로 이름을 입력받아 인사 메시지를 출력하는 CLI를 만드세요.
- `package.json`에 `start` 스크립트 등록.
- 실행: `npm start`
- 입력 후 `안녕하세요, OOO님! 환영합니다.` 출력.
homework/answer/homework_01/index.js
javascript
/**
* 과제 1: readline으로 이름을 입력받아 인사
* 실행: npm start
*/
import { createInterface } from 'node:readline/promises';
import { stdin as input, stdout as output } from 'node:process';
const rl = createInterface({ input, output });
const name = await rl.question('이름을 입력하세요: ');
console.log(`안녕하세요, ${name.trim() || '익명'}님! 환영합니다.`);
rl.close();
homework/answer/homework_01/package.json
json
{
"name": "greet-input",
"version": "1.0.0",
"type": "module",
"scripts": {
"start": "node index.js"
}
}
다음 단원
🎉 강의를 완주했습니다!
25편을 모두 마쳤다면 이제 다음을 시도해 볼 수 있습니다:
- TypeScript 입문 — JS에 타입 시스템 추가
- React/Vue 등 프레임워크
- Node.js 심화 (Express, 데이터베이스 연결)
- 빌드 도구 (Vite, esbuild)
수고하셨습니다!