Taro: eslint-plugin-taro 兼容性不太好,目前换成 standard 或 airbnb 填一下坑

Created on 12 Mar 2019  ·  15Comments  ·  Source: NervJS/taro

eslint-plugin-taro 在 Sublime 里兼容性不太好,所以把 eslint-plugin-taro 换成了 eslint-plugin-standard,暂时解决这个坑,希望 taro 可以兼容一下。

1552361046768

换成 eslint-plugin-standard 需要安装四个包


eslint-config-standard eslint-plugin-node eslint-plugin-promise eslint-plugin-standard

其中需要注意:"eslint-plugin-node": "^6.0.1"

然后记得修改 .eslintrc,把 extends 改成 standard,还需要修改下 rules

{
  "extends": ["standard"],
  "rules": {
    // "no-unused-vars": ["error", { "varsIgnorePattern": "Taro" }],
    // "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx", ".tsx"] }],
    "no-unused-vars": ["error", { "varsIgnorePattern": "[A-Z].*" }],
    "react/jsx-filename-extension": 0
  },
  "parser": "babel-eslint"
}

Most helpful comment

@taichenglu 这两个又不冲突的。。 eslint-plugin-taro 中的规则主要是针对 Taro 开发自身的,比如给你提示 jsx 不能写在 render 外,不支持 ... 操作符。 eslint 的 plugin 又不是只能用一个,你完全可以这样:

{
    "extends": ["taro", "airbnb"],
}

如果觉得 taro 的某些规则不好,你在 rule 里关掉就行了...

All 15 comments

欢迎提交 Issue~

如果你提交的是 bug 报告,请务必遵循 Issue 模板的规范,尽量用简洁的语言描述你的问题,最好能提供一个稳定简单的复现。🙏🙏🙏

如果你的信息提供过于模糊或不足,或者已经其他 issue 已经存在相关内容,你的 issue 有可能会被关闭。

Good luck and happy coding~

如果你用 standard 就跟 Taro 没有关系了,里面没有 Taro 的规则的

如果你用 standard 就跟 Taro 没有关系了,里面没有 Taro 的规则的

其实我是想用 eslint-plugin-taro,不得已才换成 eslint-plugin-standard,如果开发团队觉得没必要做这个兼容,也没事,但是这个坑我昨天是踩了一个下午才解决,各种尝试...

又折腾了一下,发现 airbnb 比 standard 效果好,需要安装两个包

eslint-config-airbnb eslint-plugin-jsx-a11y

.eslintrc

{
  "parser": "babel-eslint",
  "extends": "airbnb",
  "rules": {
    "comma-dangle": 0,
    "class-methods-use-this": 0,
    "semi": 0,
    "space-before-function-paren": ["error", "always"],
    "import/no-unresolved": 0,
    "jsx-a11y/label-has-associated-control": 0,

    "no-undef": 0,
    "no-plusplus": 0,
    "no-console": 0,

    "react/sort-comp": 0,
    "react/prop-types": 0,
    "react/react-in-jsx-scope": 0,
    "react/no-danger": 0,
    "react/jsx-filename-extension": 0,
    "react/destructuring-assignment": 0
  }
}

@taichenglu 这两个又不冲突的。。 eslint-plugin-taro 中的规则主要是针对 Taro 开发自身的,比如给你提示 jsx 不能写在 render 外,不支持 ... 操作符。 eslint 的 plugin 又不是只能用一个,你完全可以这样:

{
    "extends": ["taro", "airbnb"],
}

如果觉得 taro 的某些规则不好,你在 rule 里关掉就行了...

@js-newbee 所言极是

@taichenglu 这两个又不冲突的。。 eslint-plugin-taro 中的规则主要是针对 Taro 开发自身的,比如给你提示 jsx 不能写在 render 外,不支持 ... 操作符。 eslint 的 plugin 又不是只能用一个,你完全可以这样:

{
    "extends": ["taro", "airbnb"],
}

如果觉得 taro 的某些规则不好,你在 rule 里关掉就行了...

这和 rules 没有关系,可能我一楼没有描述好,你看一楼的截图,sublime 直接提示 cannot read config file,但是 eslint-plugin-taro 这个包是已经安装成功了的,只是 cannot read。而我同事用 vscode 就没这个问题,所以我猜是不是 eslint-plugin-taro 的兼容性不太好,我的开发环境在一楼有注明,并且 node8 和 node10 都尝试过。

@taichenglu 好吧,乍一看还以为是说 eslint-plugin-taro 的规则问题...
不过 Sublime Build 3143 很旧了,看你贴的 SublimeLinter、SublimeLinter-eslint 也很旧,不妨都更新到新版再试试?

@js-newbee 今天上午我也尝试过最新的 Sublime Build 3176,问题依旧,然后我又尝试把 SublimeLinter 和 SublimeLinter-eslint 升级到最新,packagecontrol.io 连不上,改了 channels 源,依然安装不成功,只好手动 clone 安装,但是发现安装了却用不了,没一点反应,比较诡异。

你的 linter 有报错吗

@yuche 我对比了 eslint-plugin-standard 的包文件,应该是 eslint-plugin-taro 没有转成 es5,我作了个测试

  • index.js

    删除顶部的 require,改成如下测试

module.exports = {
  rules: {
    'no-jsx-in-class-method': require('./rules/no-jsx-in-class-method')
  },
 ...
  • ./rules/no-jsx-in-class-method.js

const { buildDocsMeta } = require('../utils/utils')

改成

const buildDocsMeta = require('../utils/utils')

  • ./utils/utils.js
module.exports = {
  docsUrl,
  buildDocsMeta,
  parserOptions,
  testComponent,
  testValid,
  testInvalid,
  isTaroComponent
}

删除其他代码,改成

module.exports = buildDocsMeta

就可以了。

如果是这样我觉得应该你要升级 sublime 使用的默认 node 版本,你可以查找 sublime 用的 node 版本是哪个

如果是这样我觉得应该你要升级 sublime 使用的默认 node 版本,你可以查找 sublime 用的 node 版本是哪个

@yuche 提醒得很好,赞一个。虽然用了 nvm,但是 sublime 还是用的 system 的 node 版本

/usr/local/bin/node

这个版本是 mac 系统自带的,刚刚把它升级到 v8,没有问题了。

sudo npm install -g n
sudo n 8

我 close 了

airbnb的规则比较成熟,覆盖也很全

Was this page helpful?
0 / 5 - 0 ratings