Laravel PHP Process无法运行节点

I am trying to build an angular project from a Laravel project.

When I run an exec command from Laravel I got env: node: No such file or directory

Steps to reproduce :

  1. create Laravel project: laravel new laravel-bug
  2. create angular project: ng new angular-bug

In the Laravel file routes/web.php, in the / route, add:

use Symfony\Component\Process\Process;
$process = new Process('cd /path/to/angular-bug && ng build');
$process->run(function ($type, $buffer) {
    if (Process::ERR === $type) {
        echo 'ERR > '.$buffer;
    } else {
        echo 'OUT > '.$buffer;
    }
});

This will output the result, which for me is env: node: No such file or directory

Any ideas ?

1个回答

I've had this issue before when node wasn't in the path of the web server user. The second argument to the Process::run() method is an array of environment variables. Use it to set a path.

<?php
use Symfony\Component\Process\Process;
$env = ["PATH" => "/sbin;/bin:/usr/sbin:/usr/bin:/path/to/node/if/its/different"];
$process = new Process('cd /path/to/angular-bug && ng build');
$process->run(function ($type, $buffer) {
    if (Process::ERR === $type) {
        echo 'ERR > '.$buffer;
    } else {
        echo 'OUT > '.$buffer;
    }
}, $env);

The problem is that somewhere in this build process something is just calling node and expecting it will be in the path. (I think I experienced it when running npm.) This is not a great thing to do, and the software should be aware of where it’s located due to a compile-time setting or information from the package management system, or it should attempt to locate it.

duanba7498
duanba7498 我刚刚更新了我的答案,以解释更多的内容。
接近 2 年之前 回复
drcmg28484
drcmg28484 取决于节点的位置。 命令-v节点会告诉你。 但你在那里有什么不错。
接近 2 年之前 回复
dongmingxiang0312
dongmingxiang0312 哦,我的... @ miken32这是工作^^我怎么知道添加的正确路径是什么? 现在我添加了整个世界:/ sbin:/ bin:/ usr / sbin:/ usr / bin:/ usr / local / bin
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐