node
node copied to clipboard
Strange behavior with `fs.watch` on file with JSON stringified -> first update isn't emitted if too fast after `fs.watch`
Node.js Version
v18.17.1
NPM Version
9.6.7
Operating System
23.2.0 Darwin
Subsystem
fs
Description
I would like to watch changes on a file storing JSON stringified data but the watcher created with fs.watch
is not emitted if the change happen to quickly after the call of fs.watch
. The strange thing is that if the content is only a text (without JSON format) the watcher emit the event correctly...
Minimal Reproduction
const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, 'test.json');
// Create the file if it doesn't exist
if (!fs.existsSync(filePath)) {
fs.writeFileSync(filePath, "{ }");
}
fs.watch(filePath, (eventType, filename) => {
console.log(`Event type is: ${eventType}`);
if (filename) {
console.log(`Filename provided: ${filename}`);
} else {
console.log('Filename not provided');
}
});
fs.writeFileSync(filePath, "{ \"test\": \"test\", \"test2\": \"test2\" }"); // same with JSON.stringify(...)
// Listener above is called if we replace line above with:
// fs.writeFileSync(filePath, "very ok or not but I need a longer text to test something...");
Output
Expected
Event type is: change
Filename provided: test.json
Received
Nothing
Before You Submit
- [X] I have looked for issues that already exist before submitting this
- [X] 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