remy / nodemon

Monitor for any changes in your node.js application and automatically restart the server - perfect for development
http://nodemon.io/
MIT License
26.26k stars 1.72k forks source link

Nodemon config file different than json #2183

Closed stychu closed 8 months ago

stychu commented 8 months ago

Am I missing something or it's not possible to define custom js config file for nodemon to use it?

currently I have this nodemon.json

{
  "watch": ["./root-server", ".env", "./src/lib/logger"],
  "exec": "ts-node --project tsconfig.server.json ./root-server/server.ts",
  "ext": "js ts"
}

I would like to run some logic to extract imported files into the root-server and add them the watch for nodemon but it's not possible with .json files.

remy commented 8 months ago

You're not missing anything…

Seen here (I've snipped some of the output as it's not relevant):

$ cat nodemon.json
{
  "watch": ["./root-server", ".env", "./src/lib/logger"],
  "exec": "ts-node --project tsconfig.server.json ./root-server/server.ts",
  "ext": "js ts"
}

$ nodemon --dump
[nodemon] 3.0.2
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): root-server .env src/lib/logger
[nodemon] watching extensions: js,ts
--------------
node: v20.6.0
nodemon: 3.0.2
command: /Users/remy/.nvm/versions/node/v20.6.0/bin/node /Users/remy/.nvm/versions/node/v20.6.0/bin/nodemon --dump
cwd: /Users/remy/dev/nodemon/issues/2183
OS: darwin x64
--------------
{
  run: false,
  system: { cwd: '/Users/remy/dev/nodemon/issues/2183' },
  required: false,
  dirs: [ '/Users/remy/dev/nodemon/issues/2183' ],
  timeout: 1000,
  options: {
    dump: true,
    watch: [
      './root-server',
      '.env',
      './src/lib/logger',
      re: /\.\/root\-server|\.env|\.\/src\/lib\/logger/
    ],
    exec: 'ts-node --project tsconfig.server.json ./root-server/server.ts',
    monitor: [
      './root-server',
      '.env',
      './src/lib/logger',
      '!**/.git/**',
      '!**/.nyc_output/**',
      '!**/.sass-cache/**',
      '!**/bower_components/**',
      '!**/coverage/**',
      '!**/node_modules/**'
    ],
    execOptions: {
      script: null,
      exec: 'ts-node --project tsconfig.server.json ./root-server/server.ts',
      args: [],
      scriptPosition: null,
      nodeArgs: undefined,
      execArgs: [],
      ext: 'js,ts',
      env: {}
    }
  },
  command: {
    raw: {
      executable: 'ts-node --project tsconfig.server.json ./root-server/server.ts',
      args: []
    },
    string: 'ts-node --project tsconfig.server.json ./root-server/server.ts'
  }
}
--------------
stychu commented 8 months ago

Im not sure if my question was clear enough. I was asking if its possible to define nodemon configuration file as javascript file instead of json file in order to execute some bootstrap logic before nodemon picks up the config and runs. nodemon.json -> nodemon.js or nodemon.config.js

I have a use case where I want to automate getting all files/folders that nodemon should watch for instead of manually setting them in json file.

https://github.com/sverweij/dependency-cruiser

Something like:

// nodemon.js 

import { cruise } from "dependency-cruiser";

// automatically gather all dependency imports from ./another/folder that are contained within ./root-server
// so you dont have to remember or look for files that should cause server restart.
  const cruiseResult = await cruise(["./root-server"]);

module.export = {
  watch: ["./root-server", ...cruiseResult],
  exec: "ts-node --project tsconfig.server.json ./root-server/server.ts",
  ext: "js ts"
}
remy commented 8 months ago

There's not currently support for a nodemon.config.js type file, but you can require nodemon in a script and pass in a config (which is controlled through JavaScript): https://github.com/remy/nodemon/wiki/As-a-required-module

stychu commented 8 months ago

There's not currently support for a nodemon.config.js type file, but you can require nodemon in a script and pass in a config (which is controlled through JavaScript): Wiki: As a required module ()

Ahh that might work. I will look into it thanks !