2016-07-23 93 views
0

我試圖運行一個nodejs腳本,內置child_process模塊,它工作正常,直到我給它的選項。特別是當我將env屬性添加到選項對象時。/bin/sh:1:node:找不到和child_process.exec

let exec = require('child_process').exec; 

exec('node random.js', { env: {} }, (err) => { 
    console.log(err); 
}) 

然後我得到這個錯誤:/bin/sh: 1: node: not found

我有節點與nvm安裝,也許這是原因,但不知道爲什麼。

+0

嘗試使用節點命令的完整路徑。 –

+0

不想要硬連線到特定的版本 – Blacksonic

+0

我說這樣做來驗證問題是否你錯過了你的節點安裝目錄的路徑。您啓動的新shell不會與他的父進程共享env。 –

回答

0

如果你從你的腳本執行一個新的shell,那麼這個父shell沒有相同的環境(你的腳本)。

所以你必須提供所有需要的環境。

在你的情況下,我看到你可以做的2種方式。

第一:創建一個節點命令的完整路徑:

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變量處理路徑,或者只是改變它,當你需要的。

其次,路徑變量傳遞給該命令:

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包。

+0

[process.execPath](https://nodejs.org/dist/latest-v6.x/docs/api/process.html#process_process_execpath)可能也有幫助。 – noisypixy