0

TL;DR:如果我尝试做var pty = require('node-pty');结果以TypeError: Object.setPrototypeOf: expected an object or null, got undefined继续阅读上下文

嗨,我正在尝试通过使用 React 创建终端来构建概念证明。为此,我使用了 xterm-for-react,使它工作正常,而最后一个库的node-pty是我遇到问题的那个。最初我创建了一个文件,我会在其中尝试调用它,它看起来像这样:

var os = require('os');
var pty = require('node-pty');

var shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash';

var ptyProcess;

function createNewTerminal(FE){
    ptyProcess = pty.spawn(shell, [], {
        name: 'xterm-color',
        cols: 80,
        rows: 30,
        cwd: process.env.HOME,
        env: process.env
      });
    ptyProcess.onData((data) => FE.write(data));
}

function writeOnTerminal(data){
    ptyProcess.write(data);
}

module.exports = {
    createNewTerminal,
    writeOnTerminal
}

我知道它可能不是最好的代码,但我这样做只是为了看看这是否可能。我的计划是从 react 组件中调用函数,如下所示:

    import {createNewTerminal, writeOnTerminal} from './terminal-backend';
    function BashTerminal() {

    const xtermRef = React.useRef(null)

    React.useEffect(() => {
        // You can call any method in XTerm.js by using 'xterm xtermRef.current.terminal.[What you want to call]
        xtermRef.current.terminal.writeln("Hello, World!")
        createNewTerminal(xtermRef.current.terminal)
    }, [])

    const onData = (data) => {
        writeOnTerminal(data);
    }

    return (
        <XTerm ref={xtermRef} onData={onData}/>
    );
  }

但我很惊讶这不起作用,并返回标题中的错误。因此,为了减少噪音,我尝试将我的功能更改为仅控制台日志并满足要求。我的文件现在看起来像这样:

var os = require('os');
var pty = require('node-pty');

function createNewTerminal(FE){
    console.log("Creating new console");
}

function writeOnTerminal(data){
    console.log("Writing in terminal");
}

module.exports = {
    createNewTerminal,
    writeOnTerminal
}

仍然得到同样的错误。我目前不确定这是否可行,或者为什么会发生此错误。尝试在网上查看内容并没有给出任何结果,或者它可能确实有,但我只是做得不对。好吧,感谢阅读,我完全迷路了,所以,如果有人知道一些事情,即使它不是完整的答案,我也会非常感激

4

0 回答 0