Node.js 如何让nodemon与WSL2一起工作?
自从用Windows 2020年4月10日的更新从WSL 1更新到WSL 2(然后将Ubuntu 18更新到Ubuntu 20),当项目目录中有文件更改时,我一直无法使Node.js 如何让nodemon与WSL2一起工作?,node.js,windows-subsystem-for-linux,nodemon,ubuntu-20.04,wsl-2,Node.js,Windows Subsystem For Linux,Nodemon,Ubuntu 20.04,Wsl 2,自从用Windows 2020年4月10日的更新从WSL 1更新到WSL 2(然后将Ubuntu 18更新到Ubuntu 20),当项目目录中有文件更改时,我一直无法使nodemon进行热重新加载。当我对.js文件进行任何更改时,不会重新启动服务器或在终端上进行输出: 我用nodemon启动Node.js服务器,如下所示: NODE\u ENV=development DEBUG='knex:'nodemon--verbose--inspect./server.js” 如果有用,下面是我的s
nodemon
进行热重新加载。当我对.js
文件进行任何更改时,不会重新启动服务器或在终端上进行输出:
我用nodemon
启动Node.js服务器,如下所示:
NODE\u ENV=development DEBUG='knex:'nodemon--verbose--inspect./server.js”
如果有用,下面是我的server.js:
const-PORT=process.env.PORT | 3000;
应用程序侦听(端口,()=>{
log(`Server started and listing on port${port}`);
});
我甚至不知道如何进一步排除故障,以获得关于发生了什么的更多有用信息。根本原因:
WSL2上的9P文件系统协议不完全支持inotify
WSL项目中有几个与此相关的github问题,但可能最相关的是
可能的解决办法:
nodemon-L
(也称为——传统手表
)。
mkdir-p$HOME/Projects/testserver
)运行。请注意,到Windows文件系统的符号链接仍然不起作用。另外,WSL ext4文件系统对于像git这样的文件密集型操作会快得多。
您仍然可以通过
\\wsl$\
从Windows编辑器和工具访问源代码。
Code.
VisualStudio代码的WSL集成确实会出于某种原因触发inotify。
wsl--export
和wsl--import
创建会话备份。您可以在任何时候使用wsl--set version
切换wsl发行版的版本。
我用Windows文件系统下的一个示例项目在WSL1上测试了这一点,并且在Windows下通过notepad.exe等基本工具进行编辑仍然会触发nodemon重新启动
/
)ext4挂载(例如,$HOME/src/testserver
)上的WSL2上为我“开箱即用”
当我在WSL/WSL2创建的默认/mnt/c
挂载下尝试它时,它也能正常工作。当然,/mnt/c
在WSL2下的速度要慢得多。编辑-结果表明,我在尝试此操作时使用的是Visual Studio代码。从Windows文件系统上的其他Windows应用程序进行编辑不会触发nodemon重新启动
但是看一下屏幕截图的第一行,我看到您是从/c/Users/
运行这个挂载的……我想您创建这个(可能是CIFS)挂载是为了解决WSL2性能问题——这是一个常见的解决方法
我没有设置CIFS装载,但通过装载(替换您的Windows用户名),我可以重现您的问题:
从该装载运行nodemon
失败的方式与您描述的相同——对源代码的更改不会触发重新启动
但是,在这个挂载上运行nodemon-L
确实会在源文件更改时触发重新启动
也可以通过使用不同的选项安装来解决问题,但我现在不确定。编辑-鉴于Github上的错误报告,似乎不太可能
此外,您可能需要创建WSL会话的一些导出/备份。现在已经太迟了(对于您以前的安装),但您可以在升级之前运行
wsl.exe--export
来创建Ubuntu 18.04/WSL1文件系统的备份。您还可以使用wsl.exe--set version
更改特定发行版的版本。这可能会给您一些更好的“之前/之后”测试比较。在我这边修复了这种方法
尝试使用-g
标志和sudo
sudo npm安装-g nodemon
我正在使用WSL2,通过添加以下env变量解决了这个问题:CHOKIDAR\u USEPOLLING=true。
这是我的nodemon命令的外观:
CHOKIDAR_USEPOLLING=true nodemon index.js
现在您可以保留WSL2而不是将您的环境移动到WSL1。您是否尝试过
nodemon-L
?@Simperfy,您是对的,它与nodemon-L
一样工作,谢谢您。我为什么需要使用旧版watcher?添加了“为什么?”“我的回答是——事实证明WSL2在Windows文件系统上不完全支持inotify(由9P文件系统协议处理)。非常好的解释,谢谢。正如您所想,它在nodemon--legacy-watch
上可以正常工作。您能否告诉我如何修复此问题,以便不需要传统的监视程序?我执行了cd$HOME/Projects/testserver
,然后在没有-l
的情况下运行了nodemon
,但它无法再次识别文件更改。我应该提到,Projects是一个符号链接:除了--legacy-watch之外,还添加了一些变通方法。此外,符号链接仍然意味着源代码位于Windows文件系统上,并且将出现inotify问题(如您所见)。您必须真正使用WSL2ext4文件系统才能获得全面的inotify支持。同样,回答得很好,谢谢。我想提到的是,我在导航到cd$HOME/Projects/testserver
(同样Projects
是一个符号链接)之后,然后键入code。
在状态栏中以WSL:Ubuntu
开头,文件更改仍然无法识别(
CHOKIDAR_USEPOLLING=true nodemon index.js