我正在尝试从Laravel项目构建一个角度项目。
当我从Laravel运行exec命令时,我得到了env: node: No such file or directory
重现步骤:
- 创建拉拉维尔项目:
laravel new laravel-bug
- 创建角度项目:
ng new angular-bug
在 Laravel 文件中 routes/web.php 的/route 中添加:
use SymfonyComponentProcessProcess;
$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:node:没有这样的文件或目录
有什么想法吗?
我以前遇到过这个问题,当时node
不在 Web 服务器用户的路径中。Process::run()
方法的第二个参数是环境变量数组。使用它来设置路径。
<?php
use SymfonyComponentProcessProcess;
$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);
问题在于,在这个构建过程中的某个地方,某些东西只是在调用node
并期望它会在路径中。(我想我在运行npm
时经历过它。这不是一件好事,由于编译时设置或来自包管理系统的信息,软件应该知道它的位置,或者它应该尝试找到它。