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