我正在开发一个Node.js服务器,并且我使用nodemon在源代码更改时重新启动服务器。
此服务器依赖于我正在开发的另一个模块,因此如果对该模块的更改也重新启动了服务器,那将会很不错。
最佳尝试(谢谢,bittrider!)
如果有人想要查看,我用最少的代码制作了一个repo来重现这个问题:https://github.com/shawninder/nodemon-troubles
重点在nodemon.json
:
{
"ignoreRoot": [
".git",
".nyc_output",
".sass-cache",
"bower-components",
"coverage"
],
"ignore": [
"node_modules/!(is-node)",
"node_modules/is-node/node_modules"
]
}
ignoreRoot
与the defaults相同,但没有node_modules
。ignore
是我试图告诉它忽略node_modules的地方,而不是is-node
。这几乎可行(编辑节点重启服务器)但它正在观看所有节点模块,而不仅仅是节点。
如何告诉nodemon忽略除一个节点模块以外的所有节点模块?
详情
解释问题
Nodemon接受忽略并将它们组合成一个大的正则表达式,然后将其传递给chokidar。它是基于正则表达式的自定义解析算法,既不支持glob否定,也不支持正则表达式语法。例如,上面的示例生成以下正则表达式:
/\.git|\.nyc_output|\.sass\-cache|bower\-components|coverage|node_modules\/!\(is\-node\)\/.*.*\/.*|node_modules\/is\-node\/node_modules\/.*.*\/.*/
请注意,否定字符!
最终会生成正则表达式中的文字!
。使用负前瞻语法也不起作用,因为控制字符被转换为文字字符。
答案 0 :(得分:2)
由于nodemon
使用minimatch
进行匹配,因此您应该能够根据documentation使用符号!
进行否定。
所以在你的情况下,试试:
{
"ignore" : "node_modules/!(my-watched-module)/**/*"
}
这应忽略所有模块文件,但my-watched-module
注意:此处的
ignore
规则仅定位文件,而不是目录。这种行为在nodemon
的上下文中是有意义的,因为它会监视文件更改。