如何告诉nodemon忽略除一个目录

时间:2017-04-03 16:06:00

标签: nodemon

我正在开发一个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"
  ]
}
  • ignoreRootthe 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\/.*.*\/.*/

请注意,否定字符!最终会生成正则表达式中的文字!。使用负前瞻语法也不起作用,因为控制字符被转换为文字字符。

1 个答案:

答案 0 :(得分:2)

由于nodemon使用minimatch进行匹配,因此您应该能够根据documentation使用符号!进行否定。

所以在你的情况下,试试:

{
  "ignore" : "node_modules/!(my-watched-module)/**/*"
}

这应忽略所有模块文件,但my-watched-module

中的文件除外
  

注意:此处的ignore规则仅定位文件,而不是目录。这种行为在nodemon的上下文中是有意义的,因为它会监视文件更改。