Sublime进行静态类型代码生成_从GraphQL Schema生成TypeScript类型定义

12次阅读

sublime Text 可通过插件与外部工具链实现 graphql Schema 到 typescript 类型的生成,核心是使用 graphql-codegen 配合 Sublime 的 Build System 一键触发类型生成,并辅以 ignore 配置、自动构建和语法高亮提升开发体验。

Sublime进行静态类型代码生成_从GraphQL Schema生成TypeScript类型定义

sublime text 本身不内置 GraphQL Schema 到 TypeScript 类型的生成能力,但可以通过插件 + 外部工具链实现高效静态类型代码生成。核心思路是:用命令行工具(如 graphql-codegen)生成类型,再在 Sublime 中一键触发或快速查看/刷新。

安装并配置 graphql-codegen

这是最主流、维护活跃的方案,支持从本地 .graphql 文件或远程/本地 schema.json 生成精准的 TypeScript 类型和 Hooks。

  • 项目根目录初始化:npm init -y && npm install --save-dev @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/typescript-operations @graphql-codegen/typescript-react-query
  • 运行 npx graphql-codegen init,按提示选择 TypeScript、schema 文件位置(如 schema.json)、操作文件(src/**/*.graphql)、输出路径(如 src/generated/graphql.ts
  • 生成 codegen.yml 后,添加常用配置项:
    generates:
      src/generated/graphql.ts:
        plugins:
          - typescript
          - typescript-operations
          - typescript-react-query
        config:
          skipTypename: true
          dedupeOperationSuffix: true

在 Sublime 中集成生成命令

无需复杂插件,用 Sublime 的 Build System 即可绑定 graphql-codegen

  • 菜单 → Tools → Build System → New Build System…
  • 粘贴以下内容(适配你的项目路径和 node 环境):

{
"shell_cmd": "cd $project_path && npx graphql-codegen --config codegen.yml",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"working_dir": "$project_path",
"selector": "source.js, source.ts"
}

  • 保存为 GraphQL Codegen.sublime-build(默认存于 Packages/User/
  • 之后按 Ctrl+Shift+Bwindows/linux)或 Cmd+Shift+Bmacos),选该构建系统,即可一键生成类型文件

提升开发体验的小技巧

让 Sublime 更好地配合生成的类型文件工作:

  • 禁用对 generated/ 目录的 lint 和格式化:在项目根目录的 .prettierignore.eslintignore 中加入 src/generated/
  • 开启自动保存后生成(可选):安装插件 SublimeOnSaveBuilder,配置其只对 .graphqlschema.json 文件变更时触发 build
  • 快速跳转类型定义:确保已安装 TypeScript​SyntaxJS Custom 插件,生成的 graphql.ts 能正确高亮、支持 Ctrl+Click 跳转字段类型

替代轻量方案:使用 graphql-schema-linter + 自定义脚本

如果不想引入完整 codegen,仅需基础接口类型(如 Query, Mutation, types),可用 python/Node 小脚本解析 schema.json

  • graphql-jsbuildClientSchema + printSchema 提取类型结构
  • 写一个 gen-types.js,读取 schema.json,输出简洁的 export Interface Query { ... }
  • 同样通过 Sublime Build System 调用该脚本,适合极简项目或临时验证

基本上就这些。Sublime 不是 ide,但搭配好工具链,它照样能稳稳支撑类型驱动的 GraphQL 开发。关键不是“在 Sublime 里造轮子”,而是让它成为你高效调用专业工具的快捷入口。

text=ZqhQzanResources