我遇到了一个非常奇怪的问题,希望你能解释一下。
免责声明:我知道这是个坏主意,这不是真实场景,只是我偶然发现的一个小问题,我很好奇为什么会出现这种情况。
请看以下代码:
$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中按预期工作
which npm
命令查找这些二进制文件所在的路径。然后,你可以将 CLI 中的$PATH
变量(在 shell 中使用echo $PATH
命令)与 Web 上下文中的值进行比较(它是$_SERVER
数组的一部分)。我猜这些值会不同。 - xabbuh