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

在cPanel部署AdonisJS+NextJS+ReactJS遇jest-worker EAGAIN错误求助

cPanel部署AdonisJS+NextJS+ReactJS项目报错求助

错误日志

events.js:291
      throw er; // Unhandled 'error' event
      ^

Error: spawn /opt/alt/alt-nodejs12/root/usr/bin/node EAGAIN
    at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
    at onErrorNT (internal/child_process.js:470:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:274:12)
    at onErrorNT (internal/child_process.js:470:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  errno: 'EAGAIN',
  code: 'EAGAIN',
  syscall: 'spawn /opt/alt/alt-nodejs12/root/usr/bin/node',
  path: '/opt/alt/alt-nodejs12/root/usr/bin/node',
  spawnargs: [
    '/home/test123/nodevenv/repositories/testproject/12/lib/node_modules/jest-worker/build/workers/processChild.js'
  ]
}

项目配置文件

server.js

'use strict'

const { Ignitor } = require('@adonisjs/ignitor')

new Ignitor(require('@adonisjs/fold'))
  .appRoot(__dirname)
  .fireHttpServer()
  .catch(console.error)

next.config.js

'use strict'

const next = require('next')
const { withPlugins } = require('next-compose-plugins')
const withOffline = require('next-offline')
require('dotenv').config()

const nextWithOfflineConfig = {
    dontAutoRegisterSw: false,
    generateInDevMode: false,
    workboxOpts: {
        swDest: './next/.next/service-worker.js',
        runtimeCaching: [
            {
                urlPattern: /^https?.*/,
                handler: 'NetworkFirst',
                options: {
                    cacheName: 'https-calls',
                    networkTimeoutSeconds: 15,
                    expiration: {
                        maxEntries: 150,
                        maxAgeSeconds: 1 * 24 * 60 * 60, // 1 day
                    },
                    cacheableResponse: {
                        statuses: [0, 200],
                    },
                },
            },
        ],
        debug: false,
    },
}


const nextEnv = {
    env: {
        APP_KEY: process.env.APP_KEY,
    }
}


module.exports = withPlugins([
    [withOffline, { nextWithOfflineConfig }],
    [nextEnv]
])

package.json核心依赖

"next": "^10.0.9",
"next-compose-plugins": "^2.2.1",
"next-offline": "^5.0.3",
"next-page-transitions": "^1.0.0-beta.2",
"next-pwa": "^5.2.21",
"react": "^17.0.2"

cPanel环境信息

  • Node.js版本:12.22.9
  • npm版本:6.14.0

已尝试的无效操作

  • 删除node_modules目录:rm -rf node_modules
  • 删除依赖锁文件:rm package-lock.json yarn.lock
  • 清空npm缓存:npm cache clear --force
  • 重新安装依赖:npm install

解决方案建议

1. 排查系统资源限制(EAGAIN核心原因)

EAGAIN错误本质是系统无法分配足够资源创建新进程,cPanel虚拟主机通常有进程数、内存限制:

  • 登录cPanel查看资源使用面板,确认是否触发进程数上限或内存不足
  • 若进程数超标,关闭不必要的后台进程;若内存不足,联系主机商升级套餐或调整配额

2. 优化Next.js构建/运行的进程占用

  • 移除冲突的PWA插件:同时安装next-offline和next-pwa会导致功能重叠与额外进程开销,建议保留其中一个(推荐维护更活跃的next-pwa),删除另一个后重新安装依赖
  • 禁用Jest Worker多进程:错误日志来自jest-worker,可通过环境变量强制单进程运行:
    export NODE_OPTIONS="--max-workers=1"
    
    在cPanel的设置环境变量面板添加该变量,或在启动脚本中加入

3. 调整Node.js版本与依赖兼容性

  • Node.js 12.x对Next.js 10.x部分特性支持有限,尝试在cPanel中通过Select Node.js Version切换到14.x版本(需确保兼容项目依赖)
  • 升级Next.js到10.x最新补丁版本,修复已知进程启动bug:
    npm install next@10.0.13 --save
    

4. 修改AdonisJS启动方式

  • 增强server.js的错误捕获能力,避免未处理事件导致崩溃:
    'use strict'
    
    const { Ignitor } = require('@adonisjs/ignitor')
    const ignitor = new Ignitor(require('@adonisjs/fold')).appRoot(__dirname)
    
    ignitor.fireHttpServer()
      .catch((err) => {
        console.error('Server error:', err)
        process.exit(1)
      })
    
  • 以生产模式启动项目,减少开发模式的资源消耗:
    NODE_ENV=production node server.js
    

内容的提问来源于stack exchange,提问作者Mr-T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:20:52