为什么WSL运行NPM/Yarn远慢于原生Windows,该如何排查解决?
这个问题完全可以修复,你遇到的性能差距、文件监听报错等症状均指向WSL最常见的使用误区,可按以下优先级排查解决:
1 优先排查:项目是否存放在Windows挂载目录
你给出的Watchpack报错路径均指向/mnt/c(Windows C盘的WSL挂载路径),这是问题核心:
- WSL 2访问Windows NTFS挂载盘的IO性能仅有原生ext4文件系统的1%~10%,npm/yarn安装依赖需要读写数万小文件,性能会出现百倍级差距,完全匹配你测试的耗时差异
- WSL 2默认不支持Windows挂载盘的inotify文件事件通知,会导致文件监听失效,工具为了兜底会扫描全盘文件,触发无权限访问Windows系统隐藏文件的报错
解决方法:将所有项目文件迁移到WSL原生目录(即/home/[你的用户名]路径下),不要存放在/mnt/开头的挂载盘内,迁移后即可解决90%以上的性能和监听问题。
2 已使用WSL原生目录仍异常的排查方向
如果项目已经放在WSL原生路径下仍存在性能问题,按以下步骤排查:
- 确认WSL版本为2:运行
wsl -l -v查看Ubuntu 20.04对应的版本号,若为1,执行wsl --set-version Ubuntu-20.04 2转换版本,转换前建议备份重要数据 - 更换国内包管理器源:将NPM/Yarn源切换为国内镜像,避免海外源网络延迟影响
NPM配置命令:npm config set registry https://registry.npmmirror.com
Yarn配置命令:yarn config set registry https://registry.npmmirror.com - 添加WSL目录到杀毒软件排除项:Windows Defender的实时扫描会拦截WSL的文件操作拖慢速度,将
\\wsl$\Ubuntu-20.04路径添加到Windows安全中心的病毒和威胁防护排除列表即可 - 调整WSL资源限制:检查Windows用户目录下的
.wslconfig文件,是否存在过小的CPU、内存限制,可参考以下配置调整,修改后执行wsl --shutdown重启WSL生效:[wsl2] memory=8GB processors=8 swap=2GB
3 必须使用Windows挂载盘的临时解决方案
如果因特殊需求必须将项目存放在Windows挂载盘内,可通过以下配置缓解问题:
- 开启文件轮询监听:在项目
.env文件中添加CHOKIDAR_USEPOLLING=true,用轮询模式替代inotify事件监听,解决文件变更不生效的问题 - 调整挂载盘权限配置:在WSL内修改
/etc/wsl.conf文件,添加以下配置,重启WSL后解决挂载盘权限报错问题:[automount] options = "metadata,umask=22,fmask=11" mountFsTab = false
内容的提问来源于stack exchange,提问作者WrRaThY
相关产品推荐
相关产品推荐

