Windows下Node已安装配置环境变量,Browsershot仍找不到node命令
问题场景
我尝试使用Spatie Browsershot生成PDF,代码如下:
$html = view('components.pages.student.result.check', [ 'results' => $results, 'average' => $average, 'student' => $student])->render(); $pdf = Browsershot::html($html)->pdf(); return new Response($pdf, 200, [ 'Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline; filename="result.pdf"' ]);
但持续收到如下错误:
执行命令"node "C:\Users\HP\Documents\GitHub\School_Management_app\vendor\spatie\browsershot\src/../bin/browser.cjs" "{"url":"file://C:\Users\HP\AppData\Local\Temp\1925459280-0381687001715740509\index.html","action":"pdf","options":{"args":[],"viewport":{"width":800,"height":600},"displayHeaderFooter":false}}""失败。退出码:1(常规错误) 工作目录:C:\Users\HP\Documents\GitHub\School_Management_app\public 输出:=============== 错误输出:=============== 'node' 不是内部或外部命令,也不是可运行的程序或批处理文件。
已确认Node.js已安装,系统环境变量已指向node.exe,参考同类问题的解决方法无效,我的错误提示为node未识别,而他人同类错误多为sh未识别。
解决方案
1. 手动指定Node.js的完整路径
由于PHP进程(尤其是Web服务器进程)可能无法读取系统环境变量中的Node路径,可直接在代码中指定node.exe的绝对路径:
$pdf = Browsershot::html($html) ->setNodeBinary('C:\Program Files\nodejs\node.exe') // 替换为你的node.exe实际路径 ->pdf();
2. 重启相关进程
Windows下修改环境变量后,需要重启Web服务器(如Apache、Nginx、IIS)和终端窗口,确保进程加载最新的环境变量配置。如果使用artisan serve,需关闭后重新启动。
3. 检查PHP进程的环境变量
创建一个简单的PHP脚本,查看当前PHP进程能读取到的环境变量:
<?php var_dump(getenv('PATH')); ?>
查看输出内容中是否包含Node.js的安装路径,如果没有,说明PHP进程未获取到系统环境变量,需通过上述两种方法解决。
4. 验证Web服务器用户权限(针对IIS等场景)
如果使用IIS作为Web服务器,需确保应用池的用户有权限访问Node.js的安装目录,且在应用池高级设置中开启「加载用户配置文件」选项,确保环境变量生效。
内容的提问来源于stack exchange,提问作者PRESTIGE2930

