You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Portlet部署报错EMFILE: too many open files求助

问题描述

我们采用Adapt方式开发React Portlet,此前运行正常,近两日执行部署命令时所有React Portlet均持续报错。
部署命令:npm run deploy:liferay
核心错误信息:

Error: EMFILE: too many open files, open 'D:\Tools\workspace-liferay\NSConnect40\tools\sdk\portlets\northstar-react-portlet\northstar-npm-react-portlet-web\itinerary-react-portlet\build.liferay\jar\node_modules\style-loader@3.3.4\dist\runtime\styleDomAPI.js'

最终导致liferay-npm-bundler执行失败(状态码1)。已尝试Node版本:20.15.0、19.8.1、14.21.3、22.13.0,均无法解决问题。

解决方案

1. 提升Windows系统文件句柄限制

Windows默认文件句柄配额较低,按以下步骤调整:

  • 运行gpedit.msc打开本地组策略编辑器
  • 导航至:计算机配置 > 管理模板 > 系统 > 文件系统 > NTFS
  • 找到设置NTFS文件系统的最大文件句柄数,启用后设置更高值(例如65535)
  • 重启电脑生效

2. 优化liferay-npm-bundler并发配置

修改项目根目录的.liferay-npm-bundlerrc文件,降低并发处理的文件数量:

{
  "options": {
    "maxWorkers": 2,
    "chunkSize": 10
  }
}
  • maxWorkers限制并发工作线程数
  • chunkSize控制每次批量处理的文件数量,减少同时打开的文件句柄

3. 清理构建缓存与依赖

彻底清理旧构建文件和依赖,重新安装后尝试部署:

# 删除构建目录
rm -rf build.liferay
# 删除node_modules和锁文件
rm -rf node_modules package-lock.json
# 重新安装依赖
npm install
# 重新执行部署
npm run deploy:liferay

4. 用graceful-fs处理文件句柄溢出

安装graceful-fs替代原生fs模块,它能自动处理文件句柄泄漏问题:

npm install graceful-fs --save-dev

在项目入口文件或构建脚本顶部添加:

const gracefulFs = require('graceful-fs');
gracefulFs.gracefulify(require('fs'));

5. 更新liferay-npm-bundler至稳定版

官方可能已修复文件句柄相关bug,更新到最新稳定版:

npm update liferay-npm-bundler --save-dev

内容的提问来源于stack exchange,提问作者Sumair Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:23:11