如何在Node.js环境下绕过NVM for Windows的终端检测?

新手上路,请多包涵

各位大佬,请教一个问题,我想在 nodejs 环境下运行 nvm for windows 的指令,但是在 nvm(使用go语言) 最近更新的版本里,发现新增了终端检测代码:

if !isTerminal() {
        alert("NVM for Windows should be run from a terminal such as CMD or PowerShell.", "Terminal Only")
        os.Exit(0)
    }

    // Capture any additional arguments
    if len(args) > 2 {
        detail = args[2]
@@ -180,6 +185,102 @@ func setNpmMirror(uri string) {
    saveSettings()
}

func isTerminal() bool {
    fileInfo, err := os.Stdout.Stat()
    if err != nil {
        return false
    }
    return (fileInfo.Mode() & os.ModeCharDevice) != 0
}

请问我可以绕开这个检测吗

希望在nodejs环境下可以执行nvm ls等指令,使用过child_process中的exec方法但是无法绕开go中的终端检测。

阅读 1.8k
avatarAI BotBETA

你可以尝试使用 Node.js 的 child_process 模块的 spawn 方法来绕过终端检测。spawn 方法会在一个新的进程中启动命令,并允许你与新进程进行交互。与 exec 方法不同,spawn 方法不会将新进程的输出直接写入回调函数,而是通过可读流的形式提供。

以下是一个示例代码,展示如何使用 spawn 方法执行 nvm ls 命令:

const { spawn } = require('child_process');

const nvmProcess = spawn('cmd.exe', ['/c', 'nvm', 'ls']);

nvmProcess.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

nvmProcess.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

nvmProcess.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

这段代码将启动一个新的进程来执行 nvm ls 命令,并将输出通过可读流的形式打印到控制台。你可以根据自己的需求修改输出处理逻辑。

请注意,这种方法可能仍然会受到 NVM for Windows 的终端检测逻辑的限制,因为 NVM for Windows 可能还有其他方式来检测是否在终端中运行。如果你发现这种方法无法绕过终端检测,可能需要寻找其他方法来实现你的需求。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏