-
-
Notifications
You must be signed in to change notification settings - Fork 34.2k
Closed
Labels
fsIssues and PRs related to the fs subsystem / file system.Issues and PRs related to the fs subsystem / file system.windowsIssues and PRs related to the Windows platform.Issues and PRs related to the Windows platform.
Description
Node.js Version
v22.4.1
NPM Version
v10.8.1
Operating System
Windows 11
Subsystem
fs, process
Description
I am trying to fix some code for compatibility with node 22 that writes directly to the terminal. For unix-like OS's, things work fine due to /dev/tty, but for Windows, the code uses process.binding('fs') hackery to open the conout$ magic file. However, this no-longer works in node 22, which treats conout$ as a regular filename and of course cannot find it.
Is there a way to make something like this work for node 22? Is there finally a cleaner option to writing to the Windows console directly without using stdout?
const openWindowsConsole = () => {
// vX.X.X
const nodeVersion = parseInt(process.version.split('.')[0].slice(1), 10);
// For node 22, we seem to be unable to open CONOUT$
if (nodeVersion >= 22) {
// What do we do here?
throw new Error('This application is incompatible with Windows & node 22');
}
const openArgs = [
"CONOUT$",
// eslint-disable-next-line no-bitwise
fs.constants.O_RDWR | fs.constants.O_EXCL,
0o666
];
if (nodeVersion < 20) {
// Older version of node require null being passed explicitly for the
// optional arguments, but this breaks node 20.
openArgs.push(null, null)
}
return new tty.WriteStream(
process.binding("fs").open(...openArgs)
);
}Minimal Reproduction
Using node 22, on Windows run this code:
const fs = require('fs');
process.binding("fs").open('conout$', fs.constants.O_RDWR | fs.constants.O_EXCL, 0o666);
Output
Uncaught [Error: ENOENT: no such file or directory, open 'C:\Users\jpage\conout$'] {
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'C:\\Users\\jpage\\conout$'
}
Before You Submit
- I have looked for issues that already exist before submitting this
- My issue follows the guidelines in the README file, and follows the 'How to ask a good question' guide at https://stackoverflow.com/help/how-to-ask
Metadata
Metadata
Assignees
Labels
fsIssues and PRs related to the fs subsystem / file system.Issues and PRs related to the fs subsystem / file system.windowsIssues and PRs related to the Windows platform.Issues and PRs related to the Windows platform.