NPM 마스터 클래스 Ep 3. 귀찮은 작업은 스크립트로! (NPM Scripts)
터미널에 명령어를 칠 때마다 오타가 나거나, 명령어가 너무 길어서 외우기 힘들었던 적 있나요? NPM에는 이 모든 것을 한 단어로 줄여주는 마법 같은 기능, Scripts가 있습니다.
---
1. NPM Scripts란?
`package.json` 파일 안에 있는 `scripts` 항목을 말합니다. 긴 명령어를 별명(Alias)으로 등록해서 짧게 실행할 수 있게 해줍니다.
"scripts": {
"start": "node server.js",
"test": "echo \"Error: no test specified\" && exit 1"
}
이제 터미널에서 `npm run start`라고 입력하면, 실제로는 `node server.js`가 실행됩니다.
2. 왜 써야 하나요?
1. 기억하기 쉽습니다: `webpack --mode production --entry ./src/index.js` 같은 긴 명령어를 `npm run build`로 줄일 수 있습니다.
2. 팀원들과 통일: 팀원 A는 `node app.js`, 팀원 B는 `nodemon app.js`를 쓰면 헷갈리겠죠? 모두가 `npm run start`로 통일하면 됩니다.
3. 로컬 패키지 실행: 전역(`-g`)으로 설치하지 않은 패키지도 스크립트 안에서는 바로 실행할 수 있습니다.
3. 특별한 스크립트: start, test, restart
대부분의 스크립트는 `npm run <이름>`으로 실행해야 하지만, 자주 쓰는 몇 가지는 `run`을 생략할 수 있습니다.
* `npm start`: 서버를 켤 때 주로 씁니다.
* `npm test`: 테스트 코드를 돌릴 때 씁니다.
* `npm restart`: 껐다 켤 때 씁니다.
나머지(예: `build`, `deploy`, `lint`)는 꼭 `npm run build`처럼 `run`을 붙여야 합니다.
4. Pre & Post 훅 (Hook)
스크립트 이름 앞에 `pre`나 `post`를 붙이면, 해당 스크립트 실행 전후에 자동으로 실행됩니다.
"scripts": {
"prebuild": "rm -rf dist",
"build": "webpack",
"postbuild": "echo '빌드 완료!'"
}
`npm run build`를 실행하면?
1. `prebuild` (기존 폴더 삭제) 실행
2. `build` (웹팩 빌드) 실행
3. `postbuild` (메시지 출력) 실행
---
🛠️ 오늘의 미션: 나만의 명령어 만들기
1. `package.json`을 엽니다.
2. `scripts` 부분을 이렇게 고쳐보세요.
"scripts": {
"hello": "echo '안녕하세요! NPM 스크립트입니다.'",
"bye": "echo '안녕히 계세요!'"
}
3. 터미널에서 실행해 봅니다.
npm run hello
npm run bye
잘 실행되나요? 이제 복잡한 명령어도 두렵지 않습니다!
---
🔗 다음 예고
그런데 혹시 `package-lock.json`이라는 파일 본 적 있으신가요? 엄청 길고 복잡해서 지워버리고 싶은 충동이 들 수도 있는데요. 절대 지우면 안 됩니다! 다음 시간엔 "package-lock.json은 왜 지우면 안 되나요?"에 대해 알아봅니다.