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 "PATH=$PATH:/usr/local/bin:/opt/homebrew/bin NODE_PATH=`npm root -g` node '/home/lance/pledgebox/pledgebox_be/vendor/spatie/browsershot/src/../bin/browser.cjs' '{"url":"file:\/\/\/tmp\/138649418-0213443001692174217\/index.html","action":"pdf","options":{"path":"\/home\/lance\/pledgebox\/pledgebox_be\/public\/generate-pdf\/part1.pdf","args":[],"viewport":{"width":800,"height":600},"displayHeaderFooter":true,"headerTemplate":"<header style=\"display: flex; justify-content: space-between; width: 100%; font-size: 19px; margin: 0 1cm\">\n \n <div style=\"text-align: center\">\n <p style=\"font-weight: 500\">CARMEL DEVELOPMENT CENTER Test<\/p>\n <\/div>\n <span><\/span>\n<\/header>\n","footerTemplate":"<footer style=\"display: flex; justify-content: space-between; width: 100%; font-size: 12px; margin: 1cm 1cm 0 1cm\">\n <div style=\"text-align: left; max-width: 40%;\">\n <p>CARMEL DEVELOPMENT CENTER Test<\/p>\n <p>Series of 2023<\/p>\n <\/div>\n <p>PledgeFront<\/p>\n<\/footer>","format":"A4","waitUntil":"networkidle0","margin":{"top":"25.4mm","right":"25.4mm","bottom":"25.4mm","left":"25.4mm"},"newHeadless":true,"timeout":120000}}'" 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->callBrowser()
#1 /home/lance/pledgebox/pledgebox_be/vendor/spatie/browsershot/src/Browsershot.php(572): Spatie\Browsershot\Browsershot->savePdf()
#2 /home/lance/pledgebox/pledgebox_be/app/Services/GrantProposalsService.php(1016): Spatie\Browsershot\Browsershot->save()
#3 /home/lance/pledgebox/pledgebox_be/app/Http/Controllers/API/Pdo/GrantProposalsController.php(324): App\Services\GrantProposalsService->generatePdf()
#4 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\API\Pdo\GrantProposalsController->generatePdf()
#5 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\Routing\Controller->callAction()
#6 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\Routing\ControllerDispatcher->dispatch()
#7 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route->runController()
#8 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(798): Illuminate\Routing\Route->run()
#9 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#10 /home/lance/pledgebox/pledgebox_be/app/Http/Middleware/IsPdo.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#11 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\IsPdo->handle()
#12 /home/lance/pledgebox/pledgebox_be/app/Http/Middleware/SessionTimeOut.php(61): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#13 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\SessionTimeOut->handle()
#14 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#15 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#16 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(126): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#17 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(62): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest()
#18 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\ThrottleRequests->handle()
#19 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#20 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Auth\Middleware\Authenticate->handle()
#21 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#22 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(799): Illuminate\Pipeline\Pipeline->then()
#23 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(776): Illuminate\Routing\Router->runRouteWithinStack()
#24 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(740): Illuminate\Routing\Router->runRoute()
#25 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Routing/Router.php(729): Illuminate\Routing\Router->dispatchToRoute()
#26 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(190): Illuminate\Routing\Router->dispatch()
#27 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#28 /home/lance/pledgebox/pledgebox_be/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#29 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Fruitcake\Cors\HandleCors->handle()
#30 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->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->handle()
#32 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#33 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->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->handle()
#35 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#36 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#37 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#38 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#39 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#40 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#41 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle()
#42 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#43 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\Pipeline\Pipeline->then()
#44 /home/lance/pledgebox/pledgebox_be/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#45 /home/lance/pledgebox/pledgebox_be/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle()
#46 /home/lance/pledgebox/pledgebox_be/server.php(21): require_once('...')
#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!
Fix this by including custom path.
https://spatie.be/docs/browsershot/v2/requirements