简介
nodemon用来监视node.js应用程序中的任何更改并自动重启服务,非常适合用在开发环境中。以前,我们开发一个node后端服务时,每次更改文件,均需重启一下,服务才能生效。这使我们的开发效率降低了很多。nodemon的出现,可以随时监听文件的变更,自动重启服务,我们开发时只需关注代码即可,不再需要手动重启服务。
【在之前我们启动应用服务采用的方式都是node app.js
,但我们每次修改完node
代码之后都需要重启服务器即是重新运行命令node app.js
才能完成修改。现在使用nodemon
替代node
在开发环境下启动服务就不会这么麻烦了。nodemon
将监视启动目录中的文件,如果有任何文件更改,nodemon
将自动重新启动node
应用程序。nodemon
不需要对代码或开发方式进行任何更改。 nodemon
只是简单的包装你的node
应用程序,并监控任何已经改变的文件。nodemon
只是node
的替换包,只是在运行脚本时将其替换命令行上的node
。】
安装
全局安装
npm install -g nodemon
启动应用
nodemon [your node app]
nodemon index.js
使用
1、配置命令行:在package.json的scripts中配置
2、配置nodemon.json文件
3、配置package.json中的nodemonConfig
其中命令行:
"scripts": {
"start": "nodemon --watch src/ -e js,coffee app.js"
},
等价于配置文件(nodemon.json)
{
watch: ['src/'],
ignore: [],
script: 'app.js'
options: {
extensions: ['js', 'coffee'],
exec: 'node'
}
}
命令行
"scripts": {
"start": "nodemon"
},
等价于配置文件(nodemon.json)
{
watch: [], // meaning all subdirectories
ignore: [],
script: 'index.js',
options: {
extensions: ['js'],
exec: 'node'
}
}
其option 转化逻辑为
读命令行参数--->若无,查找本地local配置文件-->若无,查找全局配置文件->若无,尝试package.json中的main和start-->查找index.js
因此 配置启动文件,可加快启动速度,避免深度查找
不想在项目中单独维护nodemon.json配置文件,可在package.json中设置
package.json设置方法如下:
{
"name": "nodemon",
"homepage": "http://nodemon.io",
"...": "... other standard package.json values",
"nodemonConfig": {
"ignore": ["test/*", "docs/*"],
"delay": "2500"
}
}
需要注意的是,不能再通过--config 设置文件,且本地不能再保存nodemon.json文件,否则package.json中的配置将被忽略
配置
nodemon --help或者nodemon -h
查看一下nodemon
可以支持哪些运行参数。
-
--config 可设置指定配置文件
-
--ext 设置监听文件的后缀扩展名,如想要监听ts文件的变更,需设置-e ts(文件后缀名)
-
--exec 执行脚本(执行的命令)
-
--watch 设置要监听的文件路径
-
--ignore 设置无需监听的文件路径
-
--verbose
:设置日志输出模式,true
为详细模式
这些参数也可通过配置nodemon.json
文件来使用。
{
"restartable": "rs",
"verbose": true,
"watch": [
"config/",
"router/",
"utils/",
"views/",
"app.ts",
"index.ts"
],
"ignore": [
"test/*.spec.ts"
],
"delay": "1000",
"exec": "TS_NODE_PROJECT=tsconfig.server.json node --inspect -r ts-node/register ./app.ts",
"ext": "ts ejs yml json"
}
nodemon.json
各配置项含义。
-
restartable
:设置重启模式(指定重启的命令,是一个字符串,默认是 'rs') -
verbose
:是否输出重启的详细信息,值是一个布尔值,true
是打印详细信息,false
是不打印 -
watch
:这里指定监视的文件夹或文件,是一个数组,每个参数是目录或文件) -
ignore
:忽略监视的文件或文件夹,默认忽略的文件有:.git
,node_modules
,bower_components
,.sass-cache
-
delay
:设置延迟时间 -
exec
:执行的命令 -
ext
:指定默认文件的后缀,参数是一个字符串,每个后缀之间用空格分隔,默认支持js
coffee
litcoffee
-
script
: 指定监视的文件,这个一般是指定项目入口的 js 文件 env
: 运行环境 development 是开发环境,production 是生产环境,port 是端口号
修改nodemon
命令配置使用--config
选项。
"start": "nodemon --config nodemon.json"
总结
"start": "nodemon --config nodemon.json"
"start": "nodemon"
"start": "nodemon --watch src/ -e js,coffee app.js"
例子
首先创建一个文件:
// index.js
console.log('test');
执行命令:
nodemon index.js
在命令行中会出现下面的信息:
修改文件,终端中输出的信息如下:
在终端中输入 rs
会重启应用:
rs
[nodemon] starting `node ./server/index.js`
[nodemon]
结合配置参数使用
nodemon可以作为一个模块module和子进程child process来使用
// index.js
const nodemon = require('nodemon');
const path = require('path');
const options = { // 配置文件
script: path.resolve(__dirname, 'src/test.js'),
"watch": [
"docs/"
],
"ext": "md",
"restartable": 're',
"verbose": true
};
nodemon(options).on('start', function () { // 启动时的事件
console.log('App has started');
}).on('quit', function () { // 退出时的事件
console.log('App has quit');
process.exit();
}).on('restart', function (files) { // 重启时的事件
console.log('App restarted due to: ', files);
});
执行程序之后的效果如下:
App has started
App has started
App restarted due to: [ '/Users/negivup/Desktop/test/docs/nodemon.md' ]
App has started
App restarted due to: [ '/Users/negivup/Desktop/test/docs/nodemon.md' ]
具体使用方法,可参见官网doc
参考