You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何连接VSCode内置tsserver?其端口号是多少?(面向TS插件开发新手)

嗨,作为搞过VSCode TypeScript插件开发的过来人,我完全懂你想搞清楚怎么连接内置tsserver、还得查到它端口号的需求——这可是插件和TS核心服务通信的基础,咱们一步步来捋明白:

一、连接VSCode内置tsserver的正确姿势

首先得明确:VSCode默认的tsserver是通过**进程间通信(IPC)**和插件交互的,不是走网络端口哦!所以你不用手动去建立TCP连接,VSCode已经给咱们封装好了现成的API可以直接用:

  1. 先通过VSCode的API获取当前工作区的TypeScript语言服务实例,这个实例已经帮你搞定了和tsserver的通信逻辑:
import * as vscode from 'vscode';
import * as ts from 'typescript';

// 获取当前激活文档对应的TS语言服务
function getTsLanguageService(): ts.LanguageService | undefined {
  const editor = vscode.window.activeTextEditor;
  if (!editor) return undefined;
  
  const doc = editor.document;
  // 只处理TS/JS文件
  if (!['typescript', 'javascript'].includes(doc.languageId)) return undefined;
  
  // 获取封装好的TS语言服务
  const tsService = vscode.typescript.getLanguageService(doc.uri);
  return tsService as unknown as ts.LanguageService;
}
  1. 拿到这个实例后,直接调用它的方法(比如getCompletionsAtPosition获取代码补全、getSemanticDiagnostics获取语法诊断)就能和tsserver交互,不用关心底层通信细节。
二、怎么查到tsserver的端口号(前提是启用了端口模式)

默认tsserver是没有端口的,只有当你手动开启了端口监听模式才会有端口号,操作步骤如下:

  1. 先开启tsserver端口模式
    打开VSCode设置(快捷键Ctrl+,),搜索typescript.tsserver.port,可以设置一个固定端口(比如59123),或者设为-1让系统自动分配随机端口,设置后重启VSCode生效。

  2. 查询端口号的三种方式

  • 查看TS Server日志:打开命令面板(Ctrl+Shift+P),输入TypeScript: Open TS Server Log,在日志开头就能看到类似这样的内容:

    Server is listening on port 59123
    这串数字就是当前tsserver使用的端口号。

  • 通过进程工具查询:找到VSCode的tsserver进程(Windows用任务管理器、macOS用活动监视器、Linux用ps aux | grep tsserver),查看进程的命令行参数,里面会有--port XXXXX的标记,XXXXX就是端口号。
  • 在插件中读取配置:如果是在自己的插件里要获取配置的端口值,可以用VSCode的配置API:
const tsserverPort = vscode.workspace.getConfiguration('typescript').get<number>('tsserver.port');
console.log('TSServer配置的端口:', tsserverPort);

注意:如果配置的是-1,这里返回的是-1,实际随机分配的端口还是得通过日志或进程信息查询。

三、如果非要手动通过端口连接tsserver(比如调试需求)

如果你因为调试或自定义通信的需求,要手动通过TCP连接tsserver,可以用Node.js的net模块,不过要遵循tsserver的JSON通信协议(每个请求/响应都是JSON字符串加换行):

import * as net from 'net';

const client = net.createConnection({ port: 59123 }, () => {
  console.log('已连接到tsserver');
  // 发送符合tsserver协议的请求
  const request = JSON.stringify({
    seq: 1,
    type: 'request',
    command: 'open',
    arguments: {
      file: '/Users/xxx/test.ts',
      fileContent: 'const num = 123;'
    }
  });
  client.write(`${request}\n`);
});

// 监听tsserver的响应
client.on('data', (data) => {
  console.log('收到tsserver响应:', data.toString());
});

client.on('end', () => {
  console.log('与tsserver断开连接');
});

内容的提问来源于stack exchange,提问作者forestlightelf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:27:31