nodemon 参考 —->
npm-run-all 参考 —->

nodemon

用于监控 Node.js 源代码的任何变化 和 自动重启服务器

安装:

  1. npm install -g nodemon
  2. npm install nodemon -D

使用:

  1. nodemon [your node app]
  2. // 例如程序的入口文件时 server.js
  3. nodemon server.js

配置:

在项目根目录下创建 nodemon.json 文件,如下是一些常见的配置项:

  1. {
  2. "restartable":"rs",//重启的命令,默认是 rs
  3. "ignore":[""],//忽略的文件后缀名或者文件夹,文件路径的书写用相对于 nodemon.json 所在位置的相对路径
  4. "verbose": true, //表示输出详细启动与重启信息
  5. "execMap":{
  6. "":"node",
  7. "test": "gulp test"
  8. },
  9. "events":{
  10. "start":"gulp", //子进程(即监控的应用)启动
  11. "crash":"", //子进程崩溃,不会触发 exit
  12. "exit":"", //子进程完全退出,不是非正常的崩溃
  13. "restart":"gulp", //子进程重启
  14. },
  15. "ext": "js json",//监控指定后缀名的文件,用空格间隔。默认监控的后缀文件:.js, .coffee, .litcoffee, .json。但是对于没有文件后缀的文件,比如 www 文件,我暂时找不到怎么用 nodemon 去监控,就算在 watch 中包含了,nodemon 也会忽略掉
  16. "watch":[
  17. "./src/**"
  18. ],
  19. "env":{
  20. "NODE_ENV":"env", // env 是开发环境; 运行环境 development; production 是生产环境
  21. "PORT":"3000"
  22. },
  23. "legacy-watch":false, // nodemon 使用 Chokidar 作为底层监控系统,但是如果监控失效,或者提示没有需要监控的文件时,就需要使用轮询模式(polling mode),即设置 legacy-watch true,也可以在命令行中指定
  24. }

npm-run-all

在开发基于 Node.js 的项目时,很多时候都需要同时运行多个 scripts 命令,用于开发或者是用于项目的打包构建。这个时候如果是在终端里多个启动就会显得特别繁琐,那么 npm-run-all这个命令行工具就可以很方便的解决这个问题


多个启动命令

首先来找一个项目的 scripts 配置作为示例,该项目的启动命令配置如下:

  1. {
  2. "dev:start": "nodemon --watch build exec node \"build/bundle.js\"",
  3. "dev:build:client": "webpack --config webpack.config.client.js --watch",
  4. "dev:build:server": "webpack --config webpack.config.server.js --watch"
  5. }

这是一个基于 React 的服务器端渲染项目,可以看到要启动此项目,需要启动至少三个命令:npm run dev:start, npm run dev:build:client, dev:build:server, 那么就需要在终端里开三个窗口运行,这样做是非常麻烦的,那么下面就用 npm-run-all 来优化一下配置。

安装及使用

首先是安装,作为一个 npm 包,安装起来很方便,直接运行如下命令即可:

  1. npm i npm-run-all --save-dev
  2. # 或者 yarn add npm-run-all --dev

运行参数

npm-run-all 提供了多种运行多个命令的方式,常用的有以下几个:

  • --parallel: 并行运行多个命令,例如:npm-run-all --parallel lint build
  • --serial: 多个命令按排列顺序执行,例如:npm-run-all --serial clean lint build:**
  • --continue-on-error: 是否忽略错误,添加此参数 npm-run-all 会自动退出出错的命令,继续运行正常的
  • --race: 添加此参数之后,只要有一个命令运行出错,那么 npm-run-all 就会结束掉全部的命令

改进配置

在了解了用法之后,使用起来就非常简单了,下面来对文章开头提到的 scripts 配置进行优化,我们来添加一个 "dev": "npm-run-all --parallel dev:**" 命令,改进后的配置如下:

  1. {
  2. "dev": "npm-run-all --parallel dev:**",
  3. "dev:start": "nodemon --watch build exec node \"build/bundle.js\"",
  4. "dev:build:client": "webpack --config webpack.config.client.js --watch",
  5. "dev:build:server": "webpack --config webpack.config.server.js --watch"
  6. }

改进之后,我们运行项目时直接执行 npm run dev 就可以了,一条命令启动了多个服务,这样就极大的简化了操作流程。