Nodejs - 分享 - 用在 graphql schema 编写上的 eslint 规则

发布于 1周前 作者 eggper 来自 nodejs/Nestjs

Nodejs - 分享 - 用在 graphql schema 编写上的 eslint 规则

项目: eslint-plugin-graphql-schema

graphql是用在 api 查询上的 dsl ,立意独特。其中 query 的编写简洁明了,也有相关的 eslint 校验工具。但 schema 的编写对于初次使用的人来说却是非常令人迷惑的。

比如说我自己在编写的时候:

new GraphQLSchema({
  query: new GraphQLObjectType({
    // 在嵌套较多的情况下, name 属性很容易被漏掉
    name: 'AccountType',
    // descriptiton 可以很好的帮助开发者和 api 使用者理解字段意义,但不是必填项,平时开发中很容易偷懒不写
    description: 'Account description.',
    // 一定要有 fields
    fields: {
      name: {
        // fields 的子属性一定要有 type 属性
        type: GraphQLString
        args: {
          // 如果有 args , args 也一定要有 type 属性
          type: GraphQLString
        }
      }
    }
  })
})

很容易忘记在下一个{}中需要写那些属性,或是漏掉几个,直到运行代码时才能发现问题。

借助 eslint 和编写规则可以一定程度上地解决这个问题,比如对必填字段的校验就可以在编写的时候提示忘掉的必填的属性。

checkout

当然解决这里的类型校验的最好办法应该是用 flow ,但前提是你要使用 flow 。而 eslint 不仅更常被使用在项目中,也可以解决类型校验以外的问题。

目前我只是根据自己碰到的最明显的几个问题设置了四条规则,但没有找到些最佳实践来添加更多规则。如果有同学也在用 graphql-js ,特别是在实际项目中实践的同学,能从你们那里收集到一些新的规则是最好不过的了(请直接发 issues )。


3 回复

JSDoc 可以吗?


你的意思是 jsdoc 也可以做 lint 吗?我理解应该不行

在Node.js中使用GraphQL时,确保GraphQL schema的编写符合最佳实践和一致性是非常重要的。为此,我们可以使用ESLint结合特定的插件和规则来校验GraphQL schema。

以下是如何在GraphQL schema编写上应用ESLint规则的步骤:

  1. 安装必要的依赖: 首先,你需要安装eslinteslint-plugin-graphql以及一个GraphQL schema的解析器插件,如graphql-eslint

    npm install eslint eslint-plugin-graphql graphql-eslint --save-dev
    
  2. 配置ESLint: 创建一个.eslintrc.json文件,并添加GraphQL相关的规则。例如:

    {
      "env": {
        "es2021": true
      },
      "extends": ["eslint:recommended", "plugin:graphql/recommended"],
      "parser": "@graphql-eslint/eslint-plugin",
      "parserOptions": {
        "ecmaVersion": 12
      },
      "plugins": ["graphql"],
      "rules": {
        "graphql/no-deprecated-fields": "error",
        "graphql/required-arguments": "error",
        "graphql/required-fields": ["error", { "on": "MUTATION" }]
      }
    }
    
  3. 运行ESLint: 现在你可以使用eslint命令来检查GraphQL schema文件。

    eslint your-schema.graphql
    

通过这些步骤,你就可以在Node.js项目中为GraphQL schema设置并使用ESLint规则了。这将帮助你自动发现和修复schema中的潜在问题,从而提高代码质量和可维护性。

回到顶部