Nodejs 在 WSL 下文件 watch 问题

发布于 1周前 作者 caililin 来自 nodejs/Nestjs

Nodejs 在 WSL 下文件 watch 问题

之前在 windows 环境下使用 nodemon 或者 supervisor 这类程序来监控文件都是 ctrl+s 保存后才触发 nodejs 自动重启,现在在 WSL 环境下,每写一个字符都会触发自动重启。貌似因为子系统文件同步问题导致,不知道有没有靓仔遇到过这个问题,我现在想要的效果是自己手动保存后才重启。

5 回复

额~~~这个问题已经解决了,我自己的问题,自闭中…打扰了!


怎么解决的?

估计是用了自动保存的编辑器

不知道什么时候点了自动保存。哈哈。

在 WSL(Windows Subsystem for Linux)下使用 Node.js 进行文件监听(watch)时,可能会遇到一些特有的问题,如文件变动事件未能及时触发或事件触发不准确等。这通常与 WSL 和 Windows 文件系统之间的交互方式有关。

Node.js 的 fs.watchfs.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 准确捕获。

如果遇到问题,可以尝试以下几种方法:

  1. 确保 Node.js 版本是最新的,因为新版本可能修复了一些与文件系统交互的 bug。
  2. 使用 chokidar 等第三方库,这些库提供了更强大和可靠的文件监听功能。
  3. 考虑在 Linux 原生环境中运行 Node.js 应用,以避免 WSL 带来的潜在问题。
回到顶部