Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用自定义节点脚本作为shell创建Visual Studio代码集成终端_Node.js_Visual Studio Code_Electron_Vscode Extensions - Fatal编程技术网

Node.js 使用自定义节点脚本作为shell创建Visual Studio代码集成终端

Node.js 使用自定义节点脚本作为shell创建Visual Studio代码集成终端,node.js,visual-studio-code,electron,vscode-extensions,Node.js,Visual Studio Code,Electron,Vscode Extensions,我正在开发一个VisualStudio代码扩展,希望在其中创建一个终端,该终端可以访问自定义shell。我有一个Node.js脚本(.js文件),它实现了这个shell现在,我正在尝试使用扩展中的Code的createTerminal方法来启动一个终端,该终端使用Node.js脚本作为外壳。 我不能直接将shellPath设置为我的js文件,因为我不能保证用户安装了Node.js,系统将使用Node.js运行这些文件,也不能保证安装了哪个版本的Node。我需要能够指出一个普遍理解的二进制文件,它

我正在开发一个VisualStudio代码扩展,希望在其中创建一个终端,该终端可以访问自定义shell。我有一个Node.js脚本(
.js
文件),它实现了这个shell现在,我正在尝试使用扩展中的Code的createTerminal方法来启动一个终端,该终端使用Node.js脚本作为外壳。

我不能直接将
shellPath
设置为我的
js
文件,因为我不能保证用户安装了Node.js,系统将使用Node.js运行这些文件,也不能保证安装了哪个版本的Node。我需要能够指出一个普遍理解的二进制文件,它可以处理这个文件。粗略地说,我想这样做:

let terminal = vscode.window.createTerminal({
    name: "My terminal",
    shellPath: 'node', // Use the Node.js executable as the target
    shellArgs: [path.join(__dirname, 'my-shell-wrapper.js')] // Tell Node to run my shell
});
terminal.show();
我怎样才能做到这一点?是否有一个可执行文件随附代码,我可以指向它运行节点脚本?或者我还缺少另一种机制吗?

VSCode现在(在过去一年左右)可以选择为终端指定自定义行为,而不仅仅是底层shell可执行文件。有一个超负荷的需要;它有一个
pty
属性,允许您指定用于读取和写入终端的自定义处理程序。从他们的:

const writeEmitter=new vscode.EventEmitter();
常数pty:vscode.Pseudoterminal={
onDidWrite:writeEmitter.event,
打开:()=>{},
关闭:()=>{},
handleInput:data=>writeEmitter.fire(数据=='\r'?'\r\n':数据)
};
createTerminal({name:'localecho',pty});
这可用于实现任意终端交互

const writeEmitter = new vscode.EventEmitter<string>();
const pty: vscode.Pseudoterminal = {
  onDidWrite: writeEmitter.event,
  open: () => {},
  close: () => {},
  handleInput: data => writeEmitter.fire(data === '\r' ? '\r\n' : data)
};
vscode.window.createTerminal({ name: 'Local echo', pty });