Linux执行Laravel Mix的npm run dev报SyntaxError: missing )错误
问题描述
预发布Linux服务器上执行npm run dev/npm run prod/npm run watch命令失败,报错信息如下:
npm run production glob error [Error: EACCES: permission denied, scandir '/root/.npm/_logs'] { errno: -13, code: 'EACCES', syscall: 'scandir', path: '/root/.npm/_logs' } > production > mix --production /var/www/html/preprodCerf2021/node_modules/laravel-mix/bin/cli.js:2 basedir=$(dirname "$(echo "$0" | sed -e 's,\,/,g')") ^^^^^^^ SyntaxError: missing ) after argument list at Object.compileFunction (node:vm:352:18) at wrapSafe (node:internal/modules/cjs/loader:1031:15) at Module._compile (node:internal/modules/cjs/loader:1065:27) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12) at node:internal/main/run_main_module:17:47
环境与配置说明
- 服务端Node.js版本:16.8.0
- 服务端npm版本:7.21.0
- 相同代码在Windows开发环境可正常编译
- 项目文件所有权归属
www-data:www-data,权限列表如下:
-rwxr-xr-x 1 www-data www-data 817 sept. 30 10:06 package.json -rw-r--r-- 1 www-data www-data 820729 sept. 30 10:32 package-lock.json -rwxr-xr-x 1 www-data www-data 1202 janv. 22 2021 phpunit.xml drwxr-xr-x 8 www-data www-data 4096 sept. 8 16:02 public -rwxr-xr-x 1 www-data www-data 3780 janv. 22 2021 README.md drwxr-xr-x 8 www-data www-data 4096 août 31 12:55 resources drwxr-xr-x 2 www-data www-data 4096 janv. 28 2021 routes -rwxr-xr-x 1 www-data www-data 563 janv. 22 2021 server.php drwxrwxr-x 6 www-data www-data 4096 mars 5 2021 storage -rwxr-xr-x 1 www-data www-data 181 janv. 22 2021 .styleci.yml -rwxr-xr-x 1 www-data www-data 548 sept. 9 15:36 tailwind.config.js drwxr-xr-x 4 www-data www-data 4096 janv. 28 2021 tests drwxr-xr-x 61 www-data www-data 4096 août 31 12:56 vendor -rwxr-xr-x 1 www-data www-data 669 sept. 30 11:58 webpack.mix.js
解决方案
第一步:修复权限报错
报错中EACCES: permission denied, scandir '/root/.npm/_logs'是因为使用root账号执行npm命令,而项目文件归属www-data用户,执行用户不匹配导致的权限问题。
切换到项目归属用户执行npm命令即可:
sudo -u www-data npm run production
如果仍有缓存权限报错,可手动修正npm缓存目录权限:
sudo chown -R www-data:www-data /var/www/.npm # 若上述路径不存在,可临时指定缓存目录执行命令 sudo -u www-data npm run production --cache /tmp/npm-cache
第二步:修复Laravel Mix语法报错
SyntaxError: missing ) after argument list报错是因为Shell脚本被Node.js当做JS代码解析,通常是Windows环境下安装的node_modules直接上传到Linux,跨环境二进制兼容问题导致的。
清理原有依赖后重新在Linux环境安装即可:
- 删除现有node_modules和锁文件
sudo rm -rf node_modules package-lock.json
- 切换到www-data用户重新安装依赖
sudo -u www-data npm install
- 重新执行编译命令
sudo -u www-data npm run production
内容的提问来源于stack exchange,提问作者Eloise85
相关产品推荐
相关产品推荐

