remy / nodemon

Monitor for any changes in your node.js application and automatically restart the server - perfect for development

Home Page:http://nodemon.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Nodemon ignores `--ext` argument

llimllib opened this issue · comments

  • Versions: node@v20.11.1, darwin@23.4.0
  • nodemon -v: main: 0bfd65a1ea1729b2f44ed25c3c32790f541b91ae
  • Operating system/terminal environment (powershell, gitshell, etc): kitty, zsh
  • Using Docker? What image: N/A
  • Command you ran: DEBUG=nodemon:* node bin/nodemon.js --ext py .

Expected behaviour

I expected nodemon to only watch for .py files (or at least, if --ext were additive, for .py as well as .js, .mjs, .coffee, .litcoffee, and .json).

I ran this command inside a fresh checkout of this repository, so if I understand the documentation correctly it should only have been watching test/fixtures/hello.py

Actual behaviour

  • I noted that nodemon was watching every file of every extension in the repository
  • I changed doc/cli/whoami.txt, and noted that nodemon restarted:
  nodemon:watch filterAndRestart on [ 'doc/cli/whoami.txt' ] +10s
  nodemon:match rules [
  '!**/**/node_modules/**',
  '!**/**/coverage/**',
  '!**/**/bower_components/**',
  '!**/**/.sass-cache/**',
  '!**/**/.nyc_output/**',
  '!**/**/.git/**',
  '**/*.*'
] +0ms
  nodemon:match matched /Users/llimllib/code/tmp/nodemon/doc/cli/whoami.txt rule: **/*.* +3ms
  nodemon:match good [ '/Users/llimllib/code/tmp/nodemon/doc/cli/whoami.txt' ] +0ms
  nodemon:watch matched? {"result":[],"ignored":0,"watched":1,"total":1} +6ms

I found this behavior the same in my employer's repository, and used this repostiory to reproduce it.

Giving it test/fixtures/hello.py with the command DEBUG=nodemon:* node bin/nodemon.js --ext py test/fixtures/hello.py resulted in the same behavior, of nodemon restarting on the change of any file at all.

Steps to reproduce

  1. Make a fresh clone of this repository
  2. run DEBUG=nodemon:* node bin/nodemon.js --ext py ., note that nodemon lists itself as watching every file in this repository
  3. change a text file, doc/events.md for example, and note that nodemon restarts

If applicable, please append the --dump flag on your command and include the output here ensuring to remove any sensitive/personal details or tokens.

nodemon dump file
�[33m[nodemon] main: 0bfd65a1ea1729b2f44ed25c3c32790f541b91ae (1 dirty files)�[39m
�[33m[nodemon] to restart at any time, enter `rs`�[39m
�[33m[nodemon] watching path(s): *.*�[39m
�[33m[nodemon] watching extensions: py�[39m
--------------
node: v20.11.1
nodemon: main: 0bfd65a1ea1729b2f44ed25c3c32790f541b91ae (1 dirty files)
command: /Users/llimllib/.local/share/mise/installs/node/20.11.1/bin/node /Users/llimllib/code/tmp/nodemon/bin/nodemon.js --ext py --dump
cwd: /Users/llimllib/code/tmp/nodemon
OS: darwin arm64
--------------
{
  run: false,
  system: { cwd: '/Users/llimllib/code/tmp/nodemon' },
  required: false,
  dirs: [ '/Users/llimllib/code/tmp/nodemon' ],
  timeout: 1000,
  options: {
    dump: true,
    ignore: [
      '**/.git/**',
      '**/.nyc_output/**',
      '**/.sass-cache/**',
      '**/bower_components/**',
      '**/coverage/**',
      '**/node_modules/**',
      re: /.*.*\/\.git\/.*.*|.*.*\/\.nyc_output\/.*.*|.*.*\/\.sass\-cache\/.*.*|.*.*\/bower_components\/.*.*|.*.*\/coverage\/.*.*|.*.*\/node_modules\/.*.*/
    ],
    watch: [ '*.*', re: /.*\..*/ ],
    monitor: [
      '*.*',
      '!**/.git/**',
      '!**/.nyc_output/**',
      '!**/.sass-cache/**',
      '!**/bower_components/**',
      '!**/coverage/**',
      '!**/node_modules/**'
    ],
    ignoreRoot: [
      '**/.git/**',
      '**/.nyc_output/**',
      '**/.sass-cache/**',
      '**/bower_components/**',
      '**/coverage/**',
      '**/node_modules/**'
    ],
    restartable: 'rs',
    colours: true,
    execMap: { py: 'python', rb: 'ruby', ts: 'ts-node' },
    stdin: true,
    runOnChangeOnly: false,
    verbose: false,
    signal: 'SIGUSR2',
    stdout: true,
    watchOptions: {},
    execOptions: {
      script: './lib/nodemon',
      exec: 'node',
      args: [],
      scriptPosition: 0,
      nodeArgs: undefined,
      execArgs: [],
      ext: 'py',
      env: {}
    }
  },
  load: [Function (anonymous)],
  reset: [Function: reset],
  lastStarted: 0,
  loaded: [],
  watchInterval: null,
  signal: 'SIGUSR2',
  command: {
    raw: { executable: 'node', args: [ './lib/nodemon' ] },
    string: 'node ./lib/nodemon'
  }
}
--------------

This issue has been automatically marked as idle and stale because it hasn't had any recent activity. It will be automtically closed if no further activity occurs. If you think this is wrong, or the problem still persists, just pop a reply in the comments and @remy will (try!) to follow up.
Thank you for contributing <3

I'm not seeing this behaviour locally.

Here's how I'm replicating:

❯ ls -tlr
-rw-r--r--  1 remy  staff   0 16 Apr 17:28 foo.txt
-rw-r--r--  1 remy  staff  16 16 Apr 17:28 hello.py
❯ cat *
print ("Hello")
DEBUG=* nodemon --ext py hello.py

Then when I run touch foo.txt and then touch hello.py foo doesn't restart, but hello does:

  nodemon:watch chokidar watching: /Users/remy/dev/nodemon/issues/2193/foo.txt +0ms
  nodemon:watch chokidar watching: /Users/remy/dev/nodemon/issues/2193/hello.py +1ms
  nodemon watch is complete +14ms
Hello
  nodemon:run bus.emit(exit) via SIGUSR2 +41ms
  nodemon bus emit: exit +41ms
[nodemon] clean exit - waiting for changes before restart
  nodemon:watch filterAndRestart on [ 'foo.txt' ] +3s
  nodemon:match rules [
  '!**/**/node_modules/**',
  '!**/**/coverage/**',
  '!**/**/bower_components/**',
  '!**/**/.sass-cache/**',
  '!**/**/.nyc_output/**',
  '!**/**/.git/**',
  '**/*.*'
] +0ms
  nodemon:match matched /Users/remy/dev/nodemon/issues/2193/foo.txt rule: **/*.* +2ms
  nodemon:match good [ '/Users/remy/dev/nodemon/issues/2193/foo.txt' ] +0ms
  nodemon:watch matched? {"result":[],"ignored":0,"watched":1,"total":1} +3ms
  nodemon:watch filterAndRestart on [ 'hello.py' ] +5s
  nodemon:match rules [
  '!**/**/.git/**',
  '!**/**/.nyc_output/**',
  '!**/**/.sass-cache/**',
  '!**/**/bower_components/**',
  '!**/**/coverage/**',
  '!**/**/node_modules/**',
  '**/*.*'
] +5s
  nodemon:match matched /Users/remy/dev/nodemon/issues/2193/hello.py rule: **/*.* +1ms
  nodemon:match good [ '/Users/remy/dev/nodemon/issues/2193/hello.py' ] +0ms
  nodemon:watch matched? {"result":["/Users/remy/dev/nodemon/issues/2193/hello.py"],"ignored":0,"watched":1,"total":1} +1ms
[nodemon] restarting due to changes...
  nodemon bus emit: restart +8s
  nodemon bus new listener: start (0) +0ms
  nodemon bus new listener: start (0) +0ms
[nodemon] starting `python hello.py`
  nodemon:run spawn sh -c python hello.py +8s
  nodemon bus emit: start +18ms
  nodemon bus new listener: exit (1) +0ms
  nodemon:run start watch on: [ '*.*', re: /.*\..*/ ] +15ms
  nodemon:watch early exit on watch, still watching (1) +18ms
Hello
  nodemon:run bus.emit(exit) via SIGUSR2 +41ms
  nodemon bus emit: exit +41ms
[nodemon] clean exit - waiting for changes before restart

You're going to have to provide a pared down version to replicate with, otherwise there's nothing I can do to help…

I was misunderstanding that nodemon wants to watch all the files in the repo, and it notices every change, but only restarts the server on changes to files given by the --ext argument.

Apologies for the noise.