Meteor.js CircleCI 集成在 linting 上失败

Meteor.js CircleCI integration fails on linting

我正在尝试让 CircleCI 进行 运行 测试失败的 linting,但是它在某些特定于 Meteor 工作方式的地方失败了,在服务器和客户端上 运行ning .一些代码在服务器或客户端上应该只 运行。当您尝试在任何其他块内进行导入时,Lint 失败:

...
import { Meteor } from 'meteor/meteor';
import { _ } from 'meteor/underscore';
import { DDP } from 'meteor/ddp-client';

if (Meteor.isServer) {
  import './server/publications.coffee';
...

出现以下错误:

/home/ubuntu/todos/imports/api/lists/lists.tests.js
  16:3  error  Parsing error: 'import' and 'export' may only appear at the top level

显然这不符合 Meteor 的做法,因为它在 meteor/todo 应用程序中,并且工作正常。

如何绕过 CircleCI linting 检查,或将其更改为警告项?

Eslint 解析器不接受 Meteor 嵌套导入语法,因为 ES6 规范也不允许。请参阅详细信息 here. There are two options get around this: either switch to the babel-eslint 解析器,它支持带有 allowImportExportEverywhere 选项的语法。您需要像这样修改 package.json:

"devDependencies": {
  ...
  "babel-eslint": "^5.0.4"
},
"eslintConfig": {
  "parser": "babel-eslint",
  "parserOptions": {
    "sourceType": "module",
    "allowImportExportEverywhere": false
  },
}
...

或者您可以简单地使用 require 以老式的方式有条件地包含文件:

if (Meteor.isServer) {
  require('./server/publications.coffee'); // eslint-disable-line global-require
}

这些选项中的任何一个都应该使 lint 通过 CircleCI。如果你打算在 CircleCI 中使用它,我也推荐 setting up linting in your editor