在Plesk中运行NextJs报错:无法找到指定模块
Plesk部署Next.js项目时Passenger报MODULE_NOT_FOUND错误
错误日志
App 2825468 output: internal/modules/cjs/loader.js:905 App 2825468 output: throw err; App 2825468 output: ^ App 2825468 output: App 2825468 output: Error: Cannot find module '../build/output/log' App 2825468 output: Require stack: App 2825468 output: - /var/www/vhosts/immatures.de/mysmug.immatures.de/node_modules/.bin/next App 2825468 output: - /usr/share/passenger/helper-scripts/node-loader.js App 2825468 output: at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15) App 2825468 output: at Function.Module._load (internal/modules/cjs/loader.js:746:27) App 2825468 output: at Module.require (internal/modules/cjs/loader.js:974:19) App 2825468 output: at Module.require (/usr/share/passenger/helper-scripts/node-loader.js:80:25) App 2825468 output: at require (internal/modules/cjs/helpers.js:101:18) App 2825468 output: at Object.<anonymous> (/var/www/vhosts/immatures.de/mysmug.immatures.de/node_modules/.bin/next:7:35) App 2825468 output: at Module._compile (internal/modules/cjs/loader.js:1085:14) App 2825468 output: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10) App 2825468 output: at Module.load (internal/modules/cjs/loader.js:950:32) App 2825468 output: at Function.Module._load (internal/modules/cjs/loader.js:790:12) { App 2825468 output: code: 'MODULE_NOT_FOUND', App 2825468 output: requireStack: [ App 2825468 output: '/var/www/vhosts/immatures.de/mysmug.immatures.de/node_modules/.bin/next', App 2825468 output: '/usr/share/passenger/helper-scripts/node-loader.js' App 2825468 output: ] App 2825468 output: }
环境与排查情况
- Node.js版本:14.20.0(尝试16.5版本时npm install出现依赖错误,故降级)
- 已多次删除
node_modules并重新执行npm install - 本地Dev模式无法启动项目,仅设置
start为默认命令时出现Passenger错误 - 控制台直接执行
npm run build && npm run start可正常运行,但通过Plesk启动后,再用控制台启动会报错,重装node_modules可恢复控制台运行
当前Plesk应用配置
Node.js-Version: 14.20.0 Package Manager: npm Document Root: /mysmug.immatures.de/.next/static Application Mode: production Application URL: http://mysmug.immatures.de Application Root: /mysmug.immatures.de Application Startup File: node_modules/.bin/next
解决方案
修正启动文件路径
不要直接指向node_modules/.bin/next,改为使用自定义启动脚本。在项目根目录创建server.js:const { createServer } = require('http'); const { parse } = require('url'); const next = require('next'); const dev = false; const app = next({ dev }); const handle = app.getRequestHandler(); app.prepare().then(() => { createServer((req, res) => { const parsedUrl = parse(req.url, true); handle(req, res, parsedUrl); }).listen(process.env.PORT || 3000, (err) => { if (err) throw err; console.log('> Ready on http://localhost:3000'); }); });然后在Plesk的Application Startup File中设置为
server.js。调整文档根目录
将Plesk的Document Root改为/mysmug.immatures.de,Next.js生产模式下会通过服务自动处理静态资源,无需单独指向.next/static。确保build产物完整
执行npm run build后,检查.next/build/output/log文件是否存在。如果缺失,删除.next文件夹后重新执行npm run build。清理Passenger缓存
通过Plesk面板重启应用,或执行命令:passenger-config restart-app /var/www/vhosts/immatures.de/mysmug.immatures.de统一Node.js环境
确保Plesk使用的Node.js版本与本地完全一致(14.20.0),在项目根目录创建.nvmrc文件:14.20.0
内容的提问来源于stack exchange,提问作者Tician Streifeneder
相关产品推荐
相关产品推荐

