Nodejs:如何在使用child_process的spawn时使用nvm更改节点版本

时间:2017-10-16 04:28:01

标签: node.js spawn nvm

我使用spawn来运行脚本,但脚本需要node8.x而我的默认版本是6.

那么,如何在使用child_process的spawn时用nvm更改节点版本



let linkstart = ()=>{
    let cp = spawn('node', ['dist/app.js']);

    cp.stderr.on('data', (data)=>{
        console.error('stderr: ', data.toString('utf8'));
    })

    cp.stdout.on('data', (data)=>{
        console.info('stdout: ', data.toString('utf8'));
    })

    return cp;
}




2 个答案:

答案 0 :(得分:0)

您可以修改代码,调用脚本函数,然后依次切换shell的节点版本(使用nvm),然后调用脚本。

#!/bin/sh

nvm use v8.7.0
node dist/app.js

我尝试做类似

的事情
let cp = spawn('nvm', ['use', 'v8.7.0', ';', 'node', 'dist/app.js']);

但它会出现以下错误

Error: spawn nvm ENOENT

开始,进一步挖掘它,似乎我们不能直接从任何节点脚本调用nvm,这里给出了推理@ Github。如果存在任何其他可能的解决方案,我会尝试进一步查看:)

希望这有帮助!

答案 1 :(得分:0)

如果您正在运行.js文件。你需要使用process.fork

let setup = {
  execPath : '/home/User/.nvm/v8.7.0/bin/node' ,   // path to binary
  cwd: Path to dist/
  stdio : [0, 1, 2, 'ipc']       // [process.stdin, process.stdout, process.stderr, ipc]
}

let fork = require('child_process').fork;
let child = fork('app.js', setup);
相关问题