Symfony Process npm安装。在命令行界面下工作,但在HTTP下无法工作。

4

我遇到了一个非常奇怪的问题,希望你能解释一下。

免责声明:我知道这是个坏主意,这不是真实场景,只是我偶然发现的一个小问题,我很好奇为什么会出现这种情况。

请看以下代码:

$process = new \Symfony\Component\Process\Process('node -v');
$process->mustRun();
echo $process->getOutput();

$process = new \Symfony\Component\Process\Process('npm install');
$process->mustRun();
echo $process->getOutput();

如果我通过php filename.php的方式运行这段代码,它会按预期工作。 如果我将这段代码作为HTTP请求的一部分运行(由nginx提供服务),第一个命令会按预期返回节点版本,而第二个命令会引发异常:

(1/1) ProcessFailedException
The command "npm install" failed.

Exit Code: 127(Command not found)

Working directory: /Users/mrx/Documents/www/myCoolProject/

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


Error Output:
================
env: node: No such file or directory

使用yarn时同样会出现这种情况。

看起来,如果检测到CLI,则NODE会为NPM设置一些设置,但我似乎找不到任何有关此的文献。 我知道这有点牵强附会,而且并不是PHP相关的问题,但我真的很想知道一个解释。

FAQs:

  • NPM/YARN已正确安装并正常运行
  • 上述代码在php的CLI中按预期工作

1
你可以使用 which npm 命令查找这些二进制文件所在的路径。然后,你可以将 CLI 中的 $PATH 变量(在 shell 中使用 echo $PATH 命令)与 Web 上下文中的值进行比较(它是 $_SERVER 数组的一部分)。我猜这些值会不同。 - xabbuh
1个回答

2

退出代码 127 看起来像是内存不足的问题,npm 安装需要大量的 RAM,可能超出了您的 Nginx 或 Apache PHP 进程限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接