0

我正在尝试为一个项目配置 Spatie/Browsershot,用 Laravel 编写,但在完成所有步骤后,我仍然收到一个错误:

'node' 不是内部或外部命令、可运行程序或批处理文件

A 已经安装了最新版本的 node 和 npm 并且它们都存在于 PATH 中并且也可以在 cmd 上工作。

就像它写在 GitHub 上的官方文档中一样,我运行过:

  • npm 安装 puppeteer
  • 作曲家需要 spatie/browsershot

在我写的代码中:

use Spatie\Browsershot\Browsershot;

//Method to generate some random id
$unique_id = uniqid('img_');

//The path to the node and npm folders
$path_node = realpath('C:\\"Program Files"\\nodejs');
$path_npm = realpath('C:\\Users\\Hristo\\AppData\\Roaming\\npm');


//The $content is actually a stored HTML code        
Browsershot::html("$content")->setScreenshotType('jpeg', 100)
                             ->setNodeBinary($path_node)
                             ->setNpmBinary($path_npm)
                              ->save("$unique_id.jpeg");

Program Files带有双引号,否则 Laravel 会因为两个单词之间的空格而引发错误。

我不确定路径,它们是否正确编写?(windows中反斜杠的问题)

4

2 回答 2

2

这个小片段帮助我解决了这个问题。只要操作系统环境变量指向 node.exe 文件,您就可以将其放入您的代码中

->setNodeBinary('PATH %~dp0;%PATH%;') //~dp0 : fetches current directory path in windows

希望你能解决

于 2021-04-08T14:29:02.287 回答
0

如果您可以运行node -v并获取节点的版本。然后,错误是由“程序文件”之间的空格引起的。要解决这个问题:

  1. 在本地磁盘(C:) 中创建一个新文件夹,即 Programs
  2. 将您的节点文件夹移动到您刚刚创建的文件夹。
  3. 更改“环境变量”内“用户变量”中的节点“路径”,即C:\Programs\nodejs。注意:只需要包含 .exe 文件的目录,而不需要该文件。
  4. 然后,您可以使用“setNodeBinary”的路径,即"C:\Programs\\nodejs\\node.exe"。注意:此处需要 .exe 文件

这应该可以解决问题。

于 2020-07-08T00:43:56.873 回答