如何告诉 nodemon 忽略除一个目录之外的所有 node_modules

Sha*_*awn 5 nodemon

我有一个正在开发的 Node.js 服务器,我正在使用 nodemon 在源代码更改时重新启动服务器。

该服务器依赖于我也在开发的另一个模块,因此如果对该模块的更改也重新启动了服务器,那就太好了。

最好的尝试(谢谢,bitstrider!)

如果有人想查看它,我做了一个 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"
  ]
}
Run Code Online (Sandbox Code Playgroud)
  • ignoreRoot与默认值相同,但没有node_modules.
  • ignore是我试图告诉它忽略 node_modules 的地方,但不是is-node.

这几乎有效(编辑 is-node 会重新启动服务器)但它正在监视所有节点模块,而不仅仅是 is-node。

如何告诉 nodemon 忽略除一个之外的所有节点模块?

细节

说明问题

Nodemon 在将其传递给 chokidar 之前,将忽略并将它们组合成一个大的正则表达式。它是一种基于正则表达式的自定义解析算法,既不支持全局否定也不支持正则表达式语法。例如,上面的示例生成以下正则表达式:

/\.git|\.nyc_output|\.sass\-cache|bower\-components|coverage|node_modules\/!\(is\-node\)\/.*.*\/.*|node_modules\/is\-node\/node_modules\/.*.*\/.*/
Run Code Online (Sandbox Code Playgroud)

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

bit*_*der 3

根据文档,由于nodemon用于minimatch匹配,您应该能够对符号使用否定。!

因此,对于您的情况,请尝试:

{
  "ignore" : "node_modules/!(my-watched-module)/**/*"
}
Run Code Online (Sandbox Code Playgroud)

这应该忽略除其中的模块文件之外的所有模块文件my-watched-module

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