Sublime Text 的 GraphQL 补全需 LSP-graphql + SDL 格式 schema.graphql(非 schema.json),且须正确配置 graphql.config.yml、编码与路径,否则仅语法高亮。

Sublime Text 本身不提供 GraphQL Schema 内省能力,必须靠 LSP-graphql + 本地 schema.graphql 文件(非 schema.json)才能触发字段补全和类型校验。 光装插件、光有后缀、光写 gql 模板字符串,都不行——缺了内省数据源,补全就是摆设。
为什么 schema.json 在 Sublime 里基本没用
LSP-graphql 不读 introspection JSON 格式;它只认 SDL 文本(即 type Query { ... } 那种写法)。很多教程让你用 get-graphql-schema 导出 schema.json,这在 VSCode 里可能凑合,但在 Sublime 的 LSP 生态中会静默失效。
- 必须把 introspection 结果转成 SDL:用
npx @graphql-codegen/cli@latest init或apollo schema:download(加--format=SDL)生成schema.graphql -
schema.graphql文件必须是 UTF-8 编码、无 BOM、不含 JS 风格注释(//),只允许#注释 - 路径写错或文件不可读时,LSP-graphql 不报错,只是退化为纯语法高亮——你敲错字段名也不会标红
graphql.config.yml 的写法陷阱
这个文件必须放在你通过 Project → Add Folder to Project 加入的项目根目录下,不是随便哪个子文件夹。LSP-graphql 只认这个位置的配置。
- 正确写法(相对路径,以项目根为起点):
projects: default: schema: ./src/schema.graphql - 错误写法:
schema: src/schema.graphql(缺./,YAML 解析会忽略前导点)、schema: $HOME/project/schema.graphql(Sublime 不展开环境变量) - 如果 Schema 拆成多个文件,必须用数组:
schema: ["./schema/types.graphql", "./schema/queries.graphql"] - Windows 用户别用反斜杠:
.\schema\schema.graphql是非法 YAML,一律用正斜杠
JS/TS 里 gql 模板字符串怎么启用补全
默认情况下,LSP-graphql 只监听 .graphql 和 .gql 后缀文件。要在 .ts 或 .js 里获得补全,必须显式声明上下文。
- 在
graphql.config.yml中加includes字段:projects: default: schema: ./src/schema.graphql includes: - "**/*.ts" - "**/*.js" -
gql必须是全局变量或已 import(如import { gql } from '@apollo/client';),否则 LSP 无法识别该字符串属于 GraphQL 上下文 - 模板字符串需独立成行、无拼接:
const q = gql`query { user { id } }`;✅;const q = gql`` + 'query { user { id } }';❌ - 状态栏右下角必须显示
LSP-graphql,不是GraphQL——后者只是语法高亮插件,不带语言服务器
补全卡住或不响应?先看日志和状态栏
Sublime 没有后台进程管理界面,LSP 启动失败时几乎不提示。唯一可靠线索在两个地方:
- 状态栏左下角:出现
LSP-graphql: Ready才算真正就位;若一直卡在Starting...,大概率是 Node.js 版本低于 16.14,或schema路径指向了不存在的文件 - 命令面板输入
LSP: Toggle Log Panel,查看是否有Failed to start server或ENOENT类错误 - 改完
graphql.config.yml或更新schema.graphql后,必须手动执行LSP: Restart Servers,不会自动热重载
最常被忽略的一点:LSP-graphql 对语法结构极其敏感——光标必须落在 { 后面、且前面不能有未闭合的引号或括号,否则补全引擎直接放弃解析。这不是 bug,是设计使然。

















