Nodejs 在 WSL 下文件 watch 问题
Nodejs 在 WSL 下文件 watch 问题
之前在 windows 环境下使用 nodemon 或者 supervisor 这类程序来监控文件都是 ctrl+s 保存后才触发 nodejs 自动重启,现在在 WSL 环境下,每写一个字符都会触发自动重启。貌似因为子系统文件同步问题导致,不知道有没有靓仔遇到过这个问题,我现在想要的效果是自己手动保存后才重启。
5 回复
额~~~这个问题已经解决了,我自己的问题,自闭中…打扰了!
怎么解决的?
估计是用了自动保存的编辑器
不知道什么时候点了自动保存。哈哈。
在 WSL(Windows Subsystem for Linux)下使用 Node.js 进行文件监听(watch)时,可能会遇到一些特有的问题,如文件变动事件未能及时触发或事件触发不准确等。这通常与 WSL 和 Windows 文件系统之间的交互方式有关。
Node.js 的 fs.watch
和 fs.watchFile
是两个常用的文件监听方法。fs.watch
更适合监听文件或目录的变动(如创建、删除、修改),而 fs.watchFile
则专注于监听文件内容的变化。
以下是一个使用 fs.watch
的示例代码,用于监听目录中的文件变动:
const fs = require('fs');
const path = require('path');
const directoryPath = '/mnt/c/path/to/your/directory'; // WSL 下的 Windows 目录路径
fs.watch(directoryPath, (eventType, filename) => {
if (filename) {
console.log(`Event type: ${eventType}, filename: ${filename}`);
} else {
console.log(`Event type: ${eventType}, directory: ${directoryPath}`);
}
});
在 WSL 中,路径通常使用 /mnt/c/
前缀来访问 Windows 下的 C 盘目录。注意,由于 WSL 和 Windows 文件系统之间的差异,某些文件操作(如快速连续的文件修改)可能无法被 fs.watch
准确捕获。
如果遇到问题,可以尝试以下几种方法:
- 确保 Node.js 版本是最新的,因为新版本可能修复了一些与文件系统交互的 bug。
- 使用
chokidar
等第三方库,这些库提供了更强大和可靠的文件监听功能。 - 考虑在 Linux 原生环境中运行 Node.js 应用,以避免 WSL 带来的潜在问题。