是什么 ? | : | node monitor that helps develop node.js based applications by automatically restarting the node application when file changes in the directory are detected. |
开发语言 | : | Node.js |
官方主页 | : | https://nodemon.io |
源码仓库 | : | https://github.com/remy/nodemon |
nodemon
与node-supervisor功能完全一样,而且用法也几乎一样。
nodemon
据说比较轻量级。它比node-supervisor多一个配置文件, 里面可以配置那个命令行的参数,最重要的是,它有事件通知的功能,而node-supervisor没有, 另外,node-supervisor已经连续几年没有更新了。
包管理器 | 安装命令 |
---|---|
npm | npm install -g nodemon |
yarn | yarn global add nodemon |
nodemon
命令的使用方式有如下两种:
nodemon <option>
nodemon [option]... <program>
nodemon [option]... -- <program> [args ...]
上面后两种使用方式中都必须指定要执行的program
, 对于Node.js程序来说,program
就是指的启动Node.js程序的入口.js
文件,比如./bin/www
、./src/private/server.js
。
上面两种使用方式的不同点,就在于,启动指定的Node.js程序的时候,是否要给它传递参数, 如果要传递参数,就在program
的前面加上--
。
option
都是可选的。
查看nodemon
命令的帮助文档。
显示nodemon
的版本号。
如果指定了-V
或--verbose
参数,运行过程中会打印出nodemon
内部的一些额外的信息,否则信息很少,不便于我们观察。
假设,我们现在开发一个Node.js程序,这个Node.js程序的工程位于~/git/fpliu-blog
,下面是该工程的目录结构:
~/git/fpliu-blog
├── gulpfile.js
├── node_modules
│ └── gulp
├── package-lock.json
├── package.json
└── src
├── public
│ └── bower_components
│ └── jquery
└── private
├── app.js
├── config.js
├── server.js
├── routes
│ └── index.js
└── views
└── index.ejs
./src/private/server.js
就是该Node.js程序的入口文件。
使用nodemon
命令启动它:
cd ~/git/fpliu-blog
nodemon --verbose src/private/server.js
运行效果如下:
从运行后的日志可以看出,使用node
命令启动了src/private/server.js
。--watch
、--ext
、--exec
这3个参数我们没有指定,都使用了默认的值。--watch
的默认值是.
,在这个例子中就是~/git/fpliu-blog
目录。
修改一下./src/private/
目录中的任意一个.js
文件,然后保存,我们会看到,立即打印出如下的日志:
这就表明,我们修改了--watch
参数指定的被监控目录中的.js
文件之后,nodemon
自动重启了这个Node.js程序, 这样,我们就不用自己重启这个Node.js程序了,开发效率大大提高。
--watch
参数指定了要监控的目录或者文件。当监控到--watch
指定的目录中的文件发生了变化, 就会重新启动程序。
示例:
cd ~/git/fpliu-blog
nodemon --watch src/private src/private/server.js
运行效果如下:
上面的命令等同如下的命令:
cd ~/git/fpliu-blog/src/private
nodemon --verbose server.js
运行效果如下:
注意:--watch
参数的值是一个或多个文件、一个或多个文件夹,多个之间可以用逗号隔开,也可以多次使用该参数。
示例:
cd ~/git/fpliu-blog
nodemon --watch src/private,src/public src/private/server.js
nodemon --watch src/private --watch src/public src/private/server.js
--ignore
是排除--watch
参数指定的目录下的一些文件。
示例:
cd ~/git/fpliu-blog
nodemon --watch src/private --ignore src/private/views src/private/server.js
因为src/private/views
目录中存放的是ejs模板文件,这些文件变化了是不需要重新启动程序的。
--exec
参数指定用command
执行program
。
该参数大多数情况下是不用指定的,它通过后缀名就能识别出来。
示例:
cd ~/git/fpliu-blog
nodemon --exec "node" src/private/server.js
nodemon --exec "$HOME/.nvm/versions/node/v10.15.1/bin/node" src/private/server.js
--ext
参数指定检测--watch
指定的目录中的哪些后缀名的文件。
--ext
的默认值是js,mjs,json
示例:
cd ~/git/fpliu-blog
nodemon --ext "js,jade,hbs" src/private/server.js
--config
参数指定配置文件。
nodemon
命令的除了--config
参数之外的其他参数都可以使用配置指定。 另外配置文件中还可以指定nodemon
命令的参数所没有的参数。
示例:
cd ~/git/fpliu-blog
nodemon --config nodemon.json src/private/server.js
注意:nodemon
的配置文件默认是nodemon.json
,如果已经存在该文件,就可以不用在参数重显示指定。 另外,nodemon
命令的参数的优先级比配置文件的参数的优先级高。
示例:
{
"restartable": "rs",
"ignore": [
".git",
"node_modules/**/node_modules"
],
"verbose": true,
"execMap": {
"js": "node --harmony"
},
"events": {
"start": "browser-sync start --port 3001 --proxy \"localhost:3000\" -f \"**/*\"",
"restart": "broser-sync reload -f '$FILENAME'"
},
"watch": [ "src/private" ],
"env": {
"NODE_ENV": "development"
},
"ext": "js,json"
}
事件通知是node-supervisor没有的功能,他与BrowserSync结合起来,让全栈开发无比流畅,完全自动化。
你如果需要给program
传递参数,就需要这样的使用方式。其实就是多了个--
参数。
cd ~/git/fpliu-blog
nodemon -- src/private/server.js -env development
在Node.js中获取命令行参数的方法如下:
var env;
if (process.argv[2] == "-env") {
env = process.argv[3] || "production";
if (env !== "development" && env !== "production") {
env = "development";
}
} else {
env = "production";
}
console.log("env = " + env);
//设置环境,取值:development|production
app.set('env', env);
debug模块的使用。
DEBUG=* nodemon src/private/server.js