V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oyyd
V2EX  ›  Node.js

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

  •  1
     
  •   oyyd · 2017-03-11 16:04:27 +08:00 · 2400 次点击
    这是一个创建于 2796 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目: 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 )。

    2 条回复    2017-03-12 09:20:43 +08:00
    SoloCompany
        1
    SoloCompany  
       2017-03-11 16:22:12 +08:00
    JSDoc 可以吗?
    oyyd
        2
    oyyd  
    OP
       2017-03-12 09:20:43 +08:00
    @SoloCompany 你的意思是 jsdoc 也可以做 lint 吗?我理解应该不行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:24 · PVG 00:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.