当前位置: 首页 > 知识库问答 >
问题:

webpack-dev-server - WLS2与Windows差异导致Nodemon和Webpack-dev-server行为不一致,怎么办?

陈和裕
2024-09-21

WLS2环境下, nodemon无法自动重启, 代码更改后webpack-dev-server无法自动打包
wins下可以

node: v16.20.2
webpack-dev-server: 5.1.0
nodemon 3.1.4

共有2个答案

姚星腾
2024-09-21

WSL2 不支持在宿主机和虚拟机之间的 inotify,因此无法监听文件变化。

https://github.com/remy/nodemon/issues/1913
https://github.com/microsoft/WSL/issues/4169
https://github.com/microsoft/WSL/issues/4739

社区里提供了一种解决思路是开启 nodemon 的 LegacyWatch 模式。但该模式是基于轮询文件实现的,对于大项目来说性能可能会很差。

https://github.com/remy/nodemon?tab=readme-ov-file#application-isnt-restarting
祁星阑
2024-09-21

在WSL2(Windows Subsystem for Linux 2)环境中遇到Nodemon和Webpack-dev-server行为不一致的问题,通常与文件系统通知机制有关。WSL2使用虚拟机技术,其文件系统(特别是与Windows文件系统交互时)可能不如原生Linux环境或直接在Windows上运行的应用程序那样高效或实时。以下是一些可能的解决方案:

1. 使用--legacy-watch选项(对于Nodemon)

Nodemon在WSL2上可能无法有效地监视文件更改,因为它依赖于文件系统的事件通知。通过在启动Nodemon时添加--legacy-watch选项,可以强制Nodemon使用轮询机制来检查文件更改,而不是依赖文件系统的事件。这虽然可能增加CPU使用率,但可以解决监视问题:

nodemon --legacy-watch your-script.js

2. 调整Webpack-dev-server的watchOptions

对于Webpack-dev-server,你可以尝试调整其watchOptions配置,特别是poll属性。这将使Webpack使用轮询来检查文件更改,而不是依赖文件系统的通知:

// webpack.config.js
module.exports = {
  // ...
  devServer: {
    // ...
    watchOptions: {
      poll: 1000, // 每1000毫秒检查一次
      ignored: /node_modules/,
    },
  },
  // ...
};

3. 确保WSL2与Windows文件系统同步

WSL2和Windows文件系统之间的交互可能导致延迟或不一致。确保你的WSL2实例是最新的,并且你的Windows系统也是最新的,以便获得最佳的兼容性和性能。

4. 考虑使用WSL的特定设置

在WSL2中,你可以通过/etc/wsl.conf文件调整一些设置,比如禁用自动挂载Windows驱动器,或调整挂载选项来改善性能。但请注意,这些更改可能影响WSL和Windows之间的文件访问和性能。

5. 使用Docker或其他容器技术

如果问题持续存在,并且你正在开发的是可以容器化的应用,考虑使用Docker等容器技术。在Docker容器中运行你的开发环境可以提供一个更加一致和可预测的环境,尤其是在跨平台开发时。

6. 检查权限和所有权问题

确保在WSL2中运行Nodemon和Webpack-dev-server的用户具有适当的文件访问权限。权限问题有时会导致文件监视器无法正确检测到更改。

7. 查阅相关文档和社区

查看Nodemon和Webpack-dev-server的官方文档,看看是否有关于WSL2或类似环境的特定指南或已知问题。此外,社区论坛和Stack Overflow等网站可能也有其他开发者遇到并解决了类似问题的讨论。

 类似资料:
  • webpack-dev-server Use webpack with a development server that provideslive reloading. This should be used for development only. It uses webpack-dev-middleware under the hood, which providesfast in-mem

  • 问题内容: 我正在尝试使用webpack-dev-server运行一个简单的程序,但出现此错误: 我已经使用以下npm命令安装了webpack 并且我有以下配置: 我已经尝试了一切,但我真的迷路了。有人有什么主意吗? 问题答案: 是不足够的。 您还必须安装以下内容: 另外,您还可以安装:

  • 问题内容: 偶然地,我将node_modules文件夹添加到了我的git中。然后,我再次使用将其删除。 现在,当我尝试启动webpack服务器时,出现以下错误: 起初我以为这只是我的项目,但是后来我签出了本教程的代码检查点:同样的错误!因此,全球似乎有些混乱。 这是我到目前为止尝试过的: 并重新安装 正如有人在github上提到这个问题 使用以下命令全局安装webpack 从本系统中完全删除nod

  • 我正在使用webpack开发一个React webapp,大致与本教程并排。 现在,当我尝试启动webpack服务器时,我得到以下错误: 一开始我以为这只是我的项目,但后来我检查出了教程的代码检查点:相同的错误!所以全球似乎有什么事情出了问题。 以下是我目前尝试的方法: null

  • 问题内容: 我开始在开发使用的服务器端渲染应用程序的环境中工作。我对每个Webpack包在开发和生产(运行时)环境中的作用感到非常困惑。 这是我的理解摘要: :是一个软件包,是一种工具,用于将Web应用程序的不同部分结合在一起,然后捆绑成一个.js文件(通常是)。然后,结果文件将在产品环境中提供以由应用程序加载,并包含运行代码的所有必需组件。功能包括缩小代码,缩小代码等。 :是一个提供 服务器 以

  • 我开始工作与与环境开发一个服务器端渲染应用程序与。我对每个webpack包在dev和prod(运行时)环境中的作用感到非常困惑。 以下是我理解的总结: :是一个包,一个工具,用于将web应用程序的不同部分连接在一起,然后捆绑在一个单独的包中。js文件(通常是)。然后,结果文件在prod环境中提供,由应用程序加载,并包含运行代码所需的所有组件。功能包括缩小代码、缩小尺寸等。 :是一个提供服务器来处理

  • 我在运行webpack dev服务器时遇到以下问题:当我运行npm start时,它显示以下内容: ➜ 目录git:(暂存)✗ npm启动 目录 @1.0.0 启动目录 BUILD_DEV=1 BUILD_STAGING=1 ./node_modules/webpack-dev-server/bin/webpack-dev-server.js http://localhost:8080/ webp

  • 我试图设置一个webpack开发服务器,但由于某种原因,我遇到了一个错误。 [webpack-cli]无效的选项对象。已使用与API架构不匹配的选项对象初始化开发服务器。选项具有未知属性“contentBase”。这些属性是有效的:object { allowedHosts?,你好?,客户?,压缩?,devMiddleware?,标题?,historyApiFallback?,主持人?,热?,ht