eslint Travis CI中的失败,但不是本地失败

时间:2016-12-01 02:29:03

标签: node.js meteor github travis-ci eslint

我有一个通过Travis CI的GitHub project。在为新功能创建pull request后,Travis CI fails由于两个错误导致pr和push:

/home/travis/build/enove/Thriver/packages/thriver-accounts/lib/accounts.js
  121:5  error  Strings must use singlequote  quotes
  122:5  error  Strings must use singlequote  quotes

accounts.js的第119至122行如下:

119: return `Hello ${user.profile.firstname}!\n\n` +
120:  `To verify your account email, simply click the link below.\n\n${url}\n\n` +
121:  `If you weren't expecting this email, simply delete it.\n\n` +
122:  `Thanks!\n\nAll of us at WCASA`;

提交甚至没有更改accounts.js,并且本地eslint通过而没有错误。我检查并验证了node,npm和meteor的版本在本地与Travis CI中的版本相同。

Travis CI配置如下:

{
  "sudo": "required",
  "language": "node_js",
  "node_js": "4.1.1",
  "before_install": [
    "curl -L https://git.io/ejPSng | /bin/sh"
  ],
  "env": "CXX=g++-4.8",
  "addons": {
    "apt": {
      "sources": [
        "ubuntu-toolchain-r-test"
      ],
      "packages": [
        "g++-4.8"
      ]
    }
  },
  "services": "mongodb",
  "script": [
    "meteor npm run lint"
  ],
  "group": "stable",
  "dist": "precise",
  "os": "linux"
}

.eslintrc如下:

{
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaVersion": 6,
    "ecmaFeatures": {
      "impliedStrict": true
    }
  },

  "env": {
    "browser": true,
    "node": true,
    "mongo": true,
    "meteor": true
  },

  "extends": [
    "airbnb"
    //"plugin:meteor/recommended"
  ],

  "globals": {
    "Thriver": true,
    "SimpleSchema": true,
    "Marked": true,
    "SHA256": true,
    "google": true,
    "geoXML3": true,
    "AutoForm": true,
    "details_shim": true
  },

  "rules": {
    "no-underscore-dangle": 0,
    "new-cap": 0
  }
}

之前发生在另一个文件中,我已经解决了#34;让eslint忽略这一行的问题。但我无法解决每一个神秘问题。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

http://eslint.org/docs/rules/quotes

这很可能解决了您的问题。

  

JavaScript允许您以三种方式之一定义字符串:双引号,单引号和反引号(从ECMAScript 6开始)。例如:

/*eslint-env es6*/

var double = "double";
var single = 'single';
var backtick = `backtick`;    // ES6 only
  

如何在代码库中定义字符串的选择是模板文字之外的风格(允许嵌入表达式进行解释)。许多代码库要求以一致的方式定义字符串。

我会尝试设置其中一条规则并再次运行测试。

如果这不能解决您的问题,请告诉我们!

答案 1 :(得分:0)

我仍然不知道eslint是如何在本地传递的。也许我在eslint或airbnb版本中落后了。但是,我意识到线路确实需要纠正。底部的两行代码不应该使用反向标记,因为这些字符串中没有任何变量。

119: return `Hello ${user.profile.firstname}!\n\n` +
120:  `To verify your account email, simply click the link below.\n\n${url}\n\n` +
121:  'If you weren\'t expecting this email, simply delete it.\n\n' +
122:  'Thanks!\n\nAll of us at WCASA';

使用不同样式的串联字符串,Eslint会更加满意,而不是每个段都包含变量。