我尝试使用内置的child_process
模块运行nodejs脚本,它工作正常,直到我给它选项。特别是当我将env
属性添加到选项对象时。
let exec = require('child_process').exec;
exec('node random.js', { env: {} }, (err) => {
console.log(err);
})
然后我收到此错误:/bin/sh: 1: node: not found
。
我在nvm上安装了节点,也许这就是原因,但不知道为什么。
答案 0 :(得分:1)
如果您从脚本执行一个新的shell,则它与父shell(您的脚本)的环境不同。
所以你必须提供所有需要的环境。
在你的情况下,我看到你可以做的两种方式。
首先:使用完整路径创建节点命令:
let exec = require('child_process').exec;
let node_cmd = '/path/to/my/node/node';
exec(node_cmd + ' random.js', { env: {} }, (err) => {
console.log(err);
});
因此,您可以使用env变量来处理路径,或者只在需要时更改它。
其次,将path变量传递给命令:
let exec = require('child_process').exec;
let env_variables = 'PATH='+process.env.PATH;
let cmd = env_variables + ' node random.js';
exec(cmd, { env: {} }, (err) => {
console.log(err);
});
另一种方法是使用dotenv包。