You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spatie Laravel-pdf服务器运行失败:提示npm、node命令未找到

解决Spatie Laravel-pdf部署服务器后报错问题

问题分析

部署到服务器后出现如下报错:

The command "PATH=$PATH:/usr/local/bin:/opt/homebrew/bin NODE_PATH=npm root -g node '/home/u1666881/public_html/royal_ambarrukmo/api/vendor/spatie/browsershot/src/../bin/browser.cjs' '{"url":"file:///tmp/1028804210-0397463001710232070/index.html","action":"pdf","options":{"args":[],"viewport":{"width":800,"height":600},"displayHeaderFooter":false,"margin":{"top":"2cm","right":"2cm","bottom":"2cm","left":"2cm"},"format":"a4","printBackground":true}}'" failed. Exit Code: 127(Command not found) Working directory: /home/u1666881/public_html/royal_ambarrukmo/api/public Output: ================ Error Output: ================ sh: npm: command not found sh: node: command not found

核心原因:服务器未安装Node.js,或者PHP运行环境无法找到node/npm的执行路径。本地环境正常是因为已安装Node.js且路径配置正确。

使用的生成PDF代码:

return Pdf::view('leave', ['data' =>$leave, 'dp' => $dp, 'eo' => $eo, 'al' => $al, 'staff' => $staff, 'id'=> $id, 'ids' => $ids, 'users' => $users, 'quota' => $quota]) 
    ->format('a4') 
    ->margins(2, 2, 2, 2, Unit::Centimeter)
    ->name('leave-'.now()->format('Y-m-d').'.pdf');

解决步骤

1. 检查并安装Node.js

登录服务器终端,执行以下命令验证是否安装Node.js:

node -v
npm -v

如果没有返回版本号,说明未安装,根据服务器系统选择对应安装方式:

  • Ubuntu/Debian:
    sudo apt update
    sudo apt install nodejs npm
    
  • CentOS/RHEL:
    sudo yum install nodejs npm
    

安装完成后再次执行node -v和npm -v确认安装成功。

2. 指定Node.js路径给Laravel-pdf

如果已安装Node.js但仍报错,说明PHP进程无法找到node的执行路径。先找到node的实际路径:

which node

得到类似/usr/bin/node的路径后,有两种配置方式:

方式一:修改配置文件

先发布pdf配置文件(未发布过的话执行):

php artisan vendor:publish --provider="Spatie\Pdf\PdfServiceProvider"

打开config/pdf.php,找到browsershot配置项,添加node_binary:

'browsershot' => [
    'node_binary' => '/usr/bin/node', // 替换为你实际的node路径
    // 其他原有配置...
],

方式二:在代码中临时指定

在生成PDF的代码中直接设置node路径:

return Pdf::view('leave', ['data' =>$leave, 'dp' => $dp, 'eo' => $eo, 'al' => $al, 'staff' => $staff, 'id'=> $id, 'ids' => $ids, 'users' => $users, 'quota' => $quota]) 
    ->format('a4') 
    ->margins(2, 2, 2, 2, Unit::Centimeter)
    ->name('leave-'.now()->format('Y-m-d').'.pdf')
    ->browsershot(function ($browsershot) {
        $browsershot->setNodeBinary('/usr/bin/node'); // 替换为实际路径
    });

3. 安装Browsershot系统依赖

Spatie/pdf依赖Browsershot,而Browsershot需要系统级依赖支持,Ubuntu系统可执行以下命令安装:

sudo apt install libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxi6 libxtst6 libnss3 libcups2 libxss1 libxrandr2 libasound2 libpangocairo-1.0-0 libatk1.0-0 libatk-bridge2.0-0 libgtk-3-0

内容的提问来源于stack exchange,提问作者Jumbo Mambo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:58:32