Windows10 Laravel8使用Spatie Browsershot报错ENOENT如何解决
Spatie/Browsershot Windows环境报错解决方案
错误根因
报错核心是Puppeteer运行时无法读取Windows系统的TEMP/TMP环境变量,拼接临时目录路径时前缀变为undefined,导致找不到对应目录创建Chrome临时配置文件。
修复步骤
方案一:修复全局系统环境变量(推荐)
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 检查用户变量/系统变量列表中是否存在
TEMP和TMP两个变量,正常值为%USERPROFILE%\AppData\Local\Temp,不存在则手动添加,已存在则确认路径真实有效无拼写错误 - 修改完成后重启IDE、Laravel服务,确保环境变量生效
方案二:代码内手动指定临时目录(无需改全局配置)
先手动创建storage/temp目录并赋予读写权限,再修改代码如下:
public function receipt(){ $tempPath = realpath(storage_path('temp')); if(!file_exists($tempPath)){ mkdir($tempPath, 0755, true); } $image = Browsershot::url('http://localhost:8000/transaction/receipt/123') ->setNodeBinary('C:\Users\my_user\nodejs\node.exe') ->setNpmBinary('C:\Users\my_user\nodejs\npm.exe') ->setChromePath("C:\Users\my_user\AppData\Local\Google\Chrome\Application\chrome.exe") // 手动传入环境变量指定临时目录 ->setOption('env', ['TEMP' => $tempPath, 'TMP' => $tempPath]) // Windows下可选添加,解决Chrome沙箱启动权限问题 ->addChromeParameter('--no-sandbox') ->addChromeParameter('--disable-dev-shm-usage') ->base64Screenshot(); return $image; }
额外校验项
- PHP字符串中配置Windows路径时如果使用双引号,需要对反斜杠做转义,示例:
"C:\\Users\\my_user\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe" - 确认Node、Npm、Chrome的配置路径与本地实际路径一致
- 确认Laravel进程对storage目录有读写权限
内容的提问来源于stack exchange,提问作者Abimanyu Yuda Dewa
相关产品推荐
相关产品推荐

