Skip to content

--env-file-if-exists throws error when the .env file doesn't exist and when combined with --watch #56887

Closed
@mkvlrn

Description

@mkvlrn

Version

23.7.0

Platform

Linux fedora 6.12.11-200.fc41.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jan 24 04:59:58 UTC 2025 x86_64 GNU/Linux

Subsystem

No response

What steps will reproduce the bug?

Run any script in a project where a .env file doesn't exist:

node --env-file-if-exists=.env --watch main.js

If the .env file exists or you don't use the --watch flag, script runs normally without throwing errors.

How often does it reproduce? Is there a required condition?

These need to be true for the problem to occur:

  • use the flag --env-file-if-exists pointing to a non existing .env file, --env-file-if-exists=.env
  • use the flag --watch

What is the expected behavior? Why is that the expected behavior?

Script should run normally with the following message being printed right before it:

.env not found. Continuing without it.

What do you see instead?

An error stating .env was not found.

.env not found. Continuing without it.
node:internal/fs/watchers:247
    const error = new UVException({
                  ^

Error: ENOENT: no such file or directory, watch '/home/mkvlrn/github/template-discordbot/.env'
    at FSWatcher.<computed> (node:internal/fs/watchers:247:19)
    at watch (node:fs:2551:36)
    at FilesWatcher.watchPath (node:internal/watch_mode/files_watcher:109:21)
    at FilesWatcher.filterFile (node:internal/watch_mode/files_watcher:128:12)
    at start (node:internal/main/watch_mode:78:13)
    at init (node:internal/main/watch_mode:148:15)
    at node:internal/main/watch_mode:160:1 {
  errno: -2,
  syscall: 'watch',
  code: 'ENOENT',
  path: '/home/mkvlrn/github/template-discordbot/.env',
  filename: '/home/mkvlrn/github/template-discordbot/.env'
}

Node.js v23.7.0
.env not found. Continuing without it.
node:events:485                                                                                       
      throw er; // Unhandled 'error' event
      ^

Error: write EPIPE
    at target._send (node:internal/child_process:877:20)
    at target.send (node:internal/child_process:751:19)
    at #createModuleJob (node:internal/modules/esm/loader:552:15)
    at #getJobFromResolveResult (node:internal/modules/esm/loader:312:34)
    at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:280:41)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:582:25)
Emitted 'error' event on process instance at:
    at node:internal/child_process:881:39
    at process.processTicksAndRejections (node:internal/process/task_queues:85:11) {
  errno: -32,
  code: 'EPIPE',
  syscall: 'write'
}

Node.js v23.7.0

Additional information

Neither --watch nor --env-file /--env-file-if-exists documentations warn about not combining these flags.

Metadata

Metadata

Assignees

No one assigned

    Labels

    dotenvIssues and PRs related to .env file parsingwatch-modeIssues and PRs related to watch mode

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions