同步到新电脑的Strapi项目无法运行及安装依赖问题
问题重现
- 同步Strapi项目到新电脑后,
ls -l显示权限正常,但执行npm run develop提示sh: 1: strapi: not found - 执行
npm install时触发esbuild二进制文件的EACCES权限错误,错误日志如下:
npm ERR! code 1
npm ERR! path /home/me/my-app/node_modules/esbuild
npm ERR! command failed
npm ERR! command sh -c node install.js
npm ERR! node:internal/errors:491
npm ERR! ErrorCaptureStackTrace(err);
npm ERR! ^
npm ERR!
npm ERR! <ref *1> Error: spawnSync /home/me/my-app/node_modules/esbuild/bin/esbuild EACCES
npm ERR! at Object.spawnSync (node:internal/child_process:1110:20)
npm ERR! at spawnSync (node:child_process:871:24)
npm ERR! at Object.execFileSync (node:child_process:914:15)
npm ERR! at validateBinaryVersion (/home/me/my-app/node_modules/esbuild/install.js:96:28)
npm ERR! at /home/me/my-app/node_modules/esbuild/install.js:283:5 {
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'spawnSync /home/me/my-app/node_modules/esbuild/bin/esbuild',
npm ERR! path: '/home/me/my-app/node_modules/esbuild/bin/esbuild',
npm ERR! spawnargs: [ '--version' ],
npm ERR! error: [Circular *1],
npm ERR! status: null,
npm ERR! signal: null,
npm ERR! output: null,
npm ERR! pid: 0,
npm ERR! stdout: null,
npm ERR! stderr: null
npm ERR! }
npm ERR!
npm ERR! Node.js v18.13.0
- 单独安装Strapi时出现版本警告(误尝试Strapi 3),最终仍报相同EACCES错误;使用sudo执行npm无效
解决步骤
1. 清理旧依赖与缓存
同步过来的node_modules和锁文件可能包含原环境的二进制文件或权限信息,先彻底清理:
# 删除node_modules目录 rm -rf node_modules # 删除package-lock.json和yarn.lock(如果存在) rm package-lock.json yarn.lock # 清理npm缓存 npm cache clean --force
2. 修复项目目录及文件权限
同步过程可能丢失文件执行权限,手动修复项目目录权限:
# 给项目目录下所有文件添加必要权限 chmod -R u+rwX,go+rX,go-w /home/me/my-app # 如果esbuild已部分安装,单独修复其可执行权限 chmod +x /home/me/my-app/node_modules/esbuild/bin/esbuild
3. 重新安装依赖
使用本地npm安装,避免sudo(sudo会导致权限归属root,后续普通用户无法访问):
npm install
若仍出现esbuild错误,强制重新安装该包:
npm install esbuild --force
4. 验证Strapi命令可用性
安装完成后,直接调用本地Strapi命令测试:
npx strapi develop
也可修改package.json中的develop脚本,明确使用本地strapi:
{ "scripts": { "develop": "npx strapi develop" } }
5. 统一Node.js版本(可选)
两台电脑Node版本存在差异,建议用nvm统一版本:
# 安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # 安装目标版本 nvm install 18.17.1 # 在项目目录下切换至该版本 nvm use 18.17.1
内容的提问来源于stack exchange,提问作者Cormor

