npm run 명령을 실행하다보면 프로젝트마다 조금씩 설정이 달라서 잘 실행이 되지 않는 경우가 종종 존재한다.
예를 들면, npm run serve로 개발환경 서비스를 구동하는 게 요즘 일반적인 방법이지만, 예전에는 npm run dev를 사용하기도 했었고, 더 예전에는 grunt나 gulp 등을 이용해서 서비스를 구동하기도 했었다.
npm run 명령을 실행하게 되면, package.json 파일의 scripts 설정을 참고해서 실행을 하게 되는데, 다음의 예제를 살펴보자.
"scripts": {
"dev": "node build/dev-server.js",
"start": "node build/dev-server.js",
"build": "node build/build.js"
},
일반적인 Node.js 프로젝트는 node 명령을 직접 이용하는데, npm run dev 또는 npm run start를 실행하면 내부적으로 node build/dev-server.js가 실행되어 개발환경 서비스를 시작할 수 있다. 마찬가지로 npm run build로 아규먼트를 바꿔주면 내부적으로 node build/build.js가 실행된다.
"scripts": {
"dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
"build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
},
또는
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"build": "node build/build.js"
},
webpack을 직접 사용하는 경우에는 webpack-dev-server나 webpack을 이용해서 개발환경 서비스를 실행하거나 빌드를 수행할 수 있다. 하지만, npm run dev와 npm run build를 사용하는 게 더 편리하다.
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
vue-cli로 Vue.js 프로젝트를 구성하게 되면, serve, build, lint 등의 명령을 제공한다. 위 설정에 나온 것처럼, npm run serve를 실행하면 내부적으로 vue-cli-service serve가 실행되어 개발환경 서비스를 시작할 수 있다.
요즘에 Vue.js 쪽에서 밀고 있는 도구로 Vite라는 게 있는데, 이걸 이용해서 실행하는 방법도 있다.
"scripts": {
"start": "vite",
"dev": "vite",
"build": "vite build",
"serve": "vite preview"
},
npm start를 실행하는 것과 vite를 실행하는 것이 동일하다.
Nest.js는 보통 Typescript로 개발하기 때문에 Typescript 도구로 서비스를 실행하거나 빌드하게 되는데, 다음 설정을 살펴보자.
"scripts": {
"build": "tsc -p tsconfig.build.json",
"format": "prettier --write \"src/**/*.ts\"",
"start": "ts-node -r tsconfig-paths/register src/main.ts",
"start:dev": "nodemon",
"start:debug": "nodemon --config nodemon-debug.json",
...
},
npm start:dev를 실행하면 내부적으로 nodemon이 실행되는데 nodemon은 소스코드 변경 시마다 서비스를 자동으로 재시작해주는 도구이다. npm start를 실행하면 내부적으로 ts-node ...이 실행되는데, ts-node는 Typescript 버전의 node 실행 엔진이라고 할 수 있다. npm build를 실행하면 내부적으로 Typescript 컴파일러인 tsc ...가 실행되어 컴파일/빌드를 수행하게 된다.
요즘 Javascript 프로젝트들은 대부분 node 프레임워크로 만들어지므로 npm 명령을 기본으로 제공한다. 개발환경 서비스를 실행하거나 빌드를 수행할 때, 내부적으로 사용되는 다양한 도구의 명령행을 기억하기보다는 npm run 명령을 실행하면 대부분의 경우를 커버할 수 있다.
그렇다면 npm run 다음에 어떤 아규먼트를 사용해야 할까? 이건 package.json의 scripts 설정을 살펴보면 된다. 일반적으로는 npm run dev나 npm run build가 개발환경 서비스와 빌드 각각에 대응되는 가장 흔한 방법이지만, 그래도 실행이 잘 안 된다면 package.json 파일을 살펴보자.