我想在特定节点版本的节点shell中执行js代码。脚本文件位于我的项目的根目录中。现在我是这样做的:
$process = new Process(['/home/user/.nvm/versions/node/v14.17.5/bin/node', base_path('script.js')]);
$process->run();
,它正在工作。然而,这可能只在我的计算机上工作,所以我需要动态地找到正确的路径,无论在哪个环境中调用函数。
- 创建一个函数来获取特定版本的Node.js路径:
use SymfonyComponentProcessExceptionProcessFailedException;
use SymfonyComponentProcessProcess;
function getNodePath(string $version) {
$process = new Process(['nvm', 'which', $version]);
try {
$process->mustRun();
$nodePath = trim($process->getOutput());
} catch (ProcessFailedException $exception) {
// Handle the exception, for example: log an error or return a default path
$nodePath = '/usr/bin/node'; // Fallback to the system default Node.js
}
return $nodePath;
}
- 更新代码以使用getNodePath函数获取所需版本的Node.js路径:
$nodePath = getNodePath('v14.17.5');
$process = new Process([$nodePath, base_path('script.js')]);
$process->run();