Plesk部署Strapi报错Cannot find module 'strapi'如何解决
问题根因
这个报错本质是Node.js运行时在模块搜索路径里找不到strapi依赖包,对应到Plesk+Phusion Passenger的部署场景,常见触发原因有三个:
- 启动代码和Strapi版本不匹配:你使用的两行启动代码是Strapi v3版本的官方示例,2022年之后默认安装的Strapi v4/v5版本,核心入口包名已经从
strapi改成了@strapi/strapi,require的包名不对会直接触发模块找不到错误。 - Plesk路径配置错位:手动在CLI启动Strapi能正常运行,是因为你执行命令时处于Strapi项目的根目录(存在package.json、node_modules的层级),Node会自动从当前工作目录搜索依赖。但Phusion Passenger启动应用时,会严格按照Plesk面板里配置的「应用程序根目录」作为模块搜索起点,如果配置的根目录不是Strapi项目的实际根目录(比如设成了上一级目录、默认的httpdocs目录),就搜不到对应依赖。
- 依赖安装路径/权限错误:面板上点NPM install时,依赖会被装到面板配置的应用根目录下,如果之前路径配置错了,依赖就被装到了错误的文件夹里;另外如果node_modules目录的权限不允许Passenger的运行用户读取,也会抛出相同的模块找不到错误。
可落地的修复步骤
按顺序操作,每一步做完可以先测试,不用全做完:
- 修正启动文件代码
如果你安装的是Strapi v4及以上版本,把项目根目录下的server.js内容替换为对应版本的正确写法:const strapi = require('@strapi/strapi'); strapi().start(); - 修正Plesk Node.js路径配置
进入对应站点的Plesk后台「Node.js」设置页:- 把「应用程序根目录」设置为Strapi项目的实际根目录,也就是你能看到
package.json、node_modules、config文件夹的那一层路径,不要指向父目录或者httpdocs之类的默认web目录 - 把「应用程序启动文件」设置为相对于上面根目录的
server.js路径,不要填绝对路径 - 面板里选择的Node.js大版本,要和你安装Strapi时用的Node大版本保持一致
- 把「应用程序根目录」设置为Strapi项目的实际根目录,也就是你能看到
- 重新安装依赖并修正权限
通过Plesk自带的SSH终端进入上面配置的应用根目录,执行以下命令,不要依赖面板的NPM install按钮:# 执行前先确认当前目录下能看到Strapi的package.json,避免路径错误 ls # 清理之前装错位置的依赖和锁文件 rm -rf node_modules package-lock.json # 安装生产环境依赖 npm install --production # 修正目录权限,把<your-site-user>替换为该站点对应的Plesk系统用户名(一般和域名前缀一致) chown -R <your-site-user>:psacln node_modules chmod -R 755 node_modules - 重启应用
回到Plesk Node.js设置页,点击「重启应用」按钮,等待10秒左右再访问站点测试。
排查小技巧:如果操作完还是报错,在应用根目录执行
npm ls @strapi/strapi,如果输出为空说明依赖没装对位置,回去重新核对路径配置即可。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

