Browsershot stopped working after reinstalling npm and node with node version manager

279 Views Asked by At

I reinstalled node and npm with nvm after facing EACCES permissions errors when installing npm-check-updates globally. Resolving EACCES permissions errors when installing packages globally

This fixed my npm-check-updates installation. But when I run my laravel program and tried to generate a pdf file with browsershot, I'm facing the following error

<!--
Symfony\Component\Process\Exception\ProcessFailedException: The command &quot;PATH=$PATH:/usr/local/bin:/opt/homebrew/bin NODE_PATH=`npm root -g` node &#039;/home/lance/pledgebox/pledgebox_be/vendor/spatie/browsershot/src/../bin/browser.cjs&#039; &#039;{&quot;url&quot;:&quot;file:\/\/\/tmp\/138649418-0213443001692174217\/index.html&quot;,&quot;action&quot;:&quot;pdf&quot;,&quot;options&quot;:{&quot;path&quot;:&quot;\/home\/lance\/pledgebox\/pledgebox_be\/public\/generate-pdf\/part1.pdf&quot;,&quot;args&quot;:[],&quot;viewport&quot;:{&quot;width&quot;:800,&quot;height&quot;:600},&quot;displayHeaderFooter&quot;:true,&quot;headerTemplate&quot;:&quot;&lt;header style=\&quot;display: flex; justify-content: space-between; width: 100%; font-size: 19px; margin: 0 1cm\&quot;&gt;\n    \n    &lt;div style=\&quot;text-align: center\&quot;&gt;\n        &lt;p style=\&quot;font-weight: 500\&quot;&gt;CARMEL DEVELOPMENT CENTER Test&lt;\/p&gt;\n    &lt;\/div&gt;\n    &lt;span&gt;&lt;\/span&gt;\n&lt;\/header&gt;\n&quot;,&quot;footerTemplate&quot;:&quot;&lt;footer style=\&quot;display: flex; justify-content: space-between; width: 100%; font-size: 12px; margin: 1cm 1cm 0 1cm\&quot;&gt;\n    &lt;div style=\&quot;text-align: left; max-width: 40%;\&quot;&gt;\n        &lt;p&gt;CARMEL DEVELOPMENT CENTER Test&lt;\/p&gt;\n        &lt;p&gt;Series of 2023&lt;\/p&gt;\n    &lt;\/div&gt;\n    &lt;p&gt;PledgeFront&lt;\/p&gt;\n&lt;\/footer&gt;&quot;,&quot;format&quot;:&quot;A4&quot;,&quot;waitUntil&quot;:&quot;networkidle0&quot;,&quot;margin&quot;:{&quot;top&quot;:&quot;25.4mm&quot;,&quot;right&quot;:&quot;25.4mm&quot;,&quot;bottom&quot;:&quot;25.4mm&quot;,&quot;left&quot;:&quot;25.4mm&quot;},&quot;newHeadless&quot;:true,&quot;timeout&quot;:120000}}&#039;&quot; failed.

Exit Code: 127(Command not found)

Working directory: /home/lance/pledgebox/pledgebox_be/public

Output:
================


Error Output:
================
sh: 1: npm: not found
sh: 1: node: not found
 in file /home/lance/pledgebox/pledgebox_be/vendor/spatie/browsershot/src/Browsershot.php on line 953

#0 /home/lance/pledgebox/pledgebox_be/vendor/spatie/browsershot/src/Browsershot.php(646): Spatie\Browsershot\Browsershot-&gt;callBrowser()
#1 /home/lance/pledgebox/pledgebox_be/vendor/spatie/browsershot/src/Browsershot.php(572): Spatie\Browsershot\Browsershot-&gt;savePdf()
#2 /home/lance/pledgebox/pledgebox_be/app/Services/GrantProposalsService.php(1016): Spatie\Browsershot\Browsershot-&gt;save()
#3 /home/lance/pledgebox/pledgebox_be/app/Http/Controllers/API/Pdo/GrantProposalsController.php(324): App\Services\GrantProposalsService-&gt;generatePdf()
#4 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\API\Pdo\GrantProposalsController-&gt;generatePdf()
#5 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\Routing\Controller-&gt;callAction()
#6 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\Routing\ControllerDispatcher-&gt;dispatch()
#7 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route-&gt;runController()
#8 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(798): Illuminate\Routing\Route-&gt;run()
#9 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router-&gt;Illuminate\Routing\{closure}()
#10 /home/lance/pledgebox/pledgebox_be/app/Http/Middleware/IsPdo.php(21): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#11 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\IsPdo-&gt;handle()
#12 /home/lance/pledgebox/pledgebox_be/app/Http/Middleware/SessionTimeOut.php(61): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#13 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\SessionTimeOut-&gt;handle()
#14 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#15 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings-&gt;handle()
#16 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(126): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#17 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(62): Illuminate\Routing\Middleware\ThrottleRequests-&gt;handleRequest()
#18 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\ThrottleRequests-&gt;handle()
#19 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#20 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Auth\Middleware\Authenticate-&gt;handle()
#21 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#22 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(799): Illuminate\Pipeline\Pipeline-&gt;then()
#23 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(776): Illuminate\Routing\Router-&gt;runRouteWithinStack()
#24 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(740): Illuminate\Routing\Router-&gt;runRoute()
#25 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(729): Illuminate\Routing\Router-&gt;dispatchToRoute()
#26 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(190): Illuminate\Routing\Router-&gt;dispatch()
#27 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel-&gt;Illuminate\Foundation\Http\{closure}()
#28 /home/lance/pledgebox/pledgebox_be/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#29 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Fruitcake\Cors\HandleCors-&gt;handle()
#30 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#31 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest-&gt;handle()
#32 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull-&gt;handle()
#33 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#34 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest-&gt;handle()
#35 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings-&gt;handle()
#36 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#37 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize-&gt;handle()
#38 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#39 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance-&gt;handle()
#40 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#41 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies-&gt;handle()
#42 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline-&gt;Illuminate\Pipeline\{closure}()
#43 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\Pipeline\Pipeline-&gt;then()
#44 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\Foundation\Http\Kernel-&gt;sendRequestThroughRouter()
#45 /home/lance/pledgebox/pledgebox_be/public/index.php(55): Illuminate\Foundation\Http\Kernel-&gt;handle()
#46 /home/lance/pledgebox/pledgebox_be/server.php(21): require_once(&#039;...&#039;)
#47 {main}
-->

Sample Browsershot code to generate pdf

            Browsershot::html($html_part1)
                ->showBrowserHeaderAndFooter()
                ->headerHtml($header)
                ->footerHtml($footer)
                ->format('A4')
                ->waitUntilNetworkIdle()
                ->margins(25.4, 25.4, 25.4, 25.4)
                ->newHeadless()
                ->timeout(120)
                ->save($temp_path . 'part1.pdf');

This was previously working when I was using node/npm by NodeSource installer. But I don't want to revert back to NodeSource as npm docs recommends using node version manager. Please advice thank you!

1

There are 1 best solutions below

2
lance2k On

Fix this by including custom path.

            Browsershot::html($html_part1)
                ->setIncludePath('$PATH:/home/lance/.nvm/versions/node/v18.17.1/bin')
                ->showBrowserHeaderAndFooter()
                ->headerHtml($header)
                ->footerHtml($footer)
                ->format('A4')
                ->waitUntilNetworkIdle()
                ->margins(25.4, 25.4, 25.4, 25.4)
                ->newHeadless()
                ->timeout(120)
                ->save($temp_path . 'part1.pdf');

https://spatie.be/docs/browsershot/v2/requirements