如何解决如何使nodemon与WSL 2配合使用? 根本原因:可能的解决方法:更长的答案:
自从使用Windows 10 2020年4月更新从WSL 1更新到WSL 2(然后将Ubuntu 18更新到Ubuntu 20)之后,当文件发生更改时,我一直无法使nodemon
进行热重载在项目目录中。当我对.js
文件进行任何更改时,都不会重新启动服务器或在终端上输出:
我用nodemon
来启动Node.js服务器,如下所示:
NODE_ENV=development DEBUG='knex:*' nodemon --verbose --inspect ./server.js"
如果有用,这是我的 server.js :
const PORT = process.env.PORT || 3000;
app.listen(PORT,() => {
console.log(`Server started and listening on port ${PORT}`);
});
我什至不确定如何进一步解决此问题,以获取有关正在发生的事情的更多有用信息。如果我错过了一些相关信息,请以评论的形式告诉我,而不是仅仅投票,然后我将相应地更新问题。
解决方法
根本原因:
WSL2上的9P文件系统协议不完全支持inotify。
有关WSL项目的github问题与此相关,但也许最相关的是#4739。
可能的解决方法:
-
按照Simperfy的建议尝试
nodemon -L
(又称--legacy-watch
)。 -
尝试从默认的ext4文件系统(例如
mkdir -p $HOME/Projects/testserver
)运行。请注意,到Windows文件系统的符号链接仍然不起作用。另外,对于诸如git之类的文件密集型操作,WSL ext4文件系统将更快。
您仍然可以通过\\wsl$\
从Windows编辑器和工具访问源。 -
在Remote-WSL extension上使用Visual Studio Code在Windows文件系统上编辑源。最简单的方法是通过在WSL中导航到您的项目目录并运行
code .
。由于某些原因,Visual Studio Code的WSL集成确实触发了inotify。
-
如果不需要任何WSL2功能,则将会话降级为WSL1。我同时保持WSL1和WSL2会话。最好的方法是使用
wsl --export
和wsl --import
创建会话的备份。您可以随时使用wsl --set-version
切换WSL发行版的版本。
我确实在WSL1上使用Windows文件系统下的示例项目对此进行了测试,并且在Windows下通过诸如notepad.exe之类的基本内容进行编辑仍触发nodemon重新启动。
更长的答案:
nodemon在根(/
)ext4挂载(例如$HOME/src/testserver
)上的WSL2上为我“开箱即用”。
当我在WSL / WSL2创建的默认 编辑-事实证明,当我尝试使用Visual Studio Code时。从Windows文件系统上的其他Windows应用程序进行编辑并没有触发nodemon重新启动。/mnt/c
安装下尝试它时,它也可以正常工作。当然,/mnt/c
在WSL2下要慢得多。
但是查看屏幕快照的第一行,我发现您正在/c/Users/
上运行它。...我在想,也许您创建了这个(也许是CIFS)挂载来尝试解决WSL2性能问题-这是一种常见的解决方法。
我没有设置CIFS挂载,但是我可以通过挂载(代替Windows用户名)来重现您的问题:
mkdir $HOME/mnttest
sudo mount -t drvfs 'C:' $HOME/mnttest
cd $HOME/mnttest/Users/Raj/Projects/testserver
从此挂载运行nodemon
失败,其方式与您描述的相同-对源所做的更改未触发重新启动。
但是,在更改源文件后,在此挂载 did 上与nodemon -L
一起运行会触发重新启动。
也可以通过使用不同的选项进行安装来解决问题,但我现在不确定。 编辑-鉴于在Github上的错误报告。
此外,您可能想为WSL会话创建一些导出/备份。此时(对于您以前的安装而言)为时已晚,但是您可以运行wsl.exe --export
来创建Ubuntu 18.04 / WSL1文件系统的备份,然后再进行升级。您也可以使用wsl.exe --set-version
更改特定发行版的版本。这样可以为您提供更好的“之前/之后”测试比较。
我正在使用 WSL 2,并通过添加以下环境变量解决了该问题:CHOKIDAR_USEPOLLING=true。
这是我的 nodemon 命令的样子:
CHOKIDAR_USEPOLLING=true nodemon index.js
现在您可以保留 WSL2 而不是将您的环境迁移到 WSL1。
,以这种方式固定在我的末端;
尝试将-g
标志和sudo
一起安装
sudo npm install -g nodemon
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。