如何设置 .eslintrc 以识别 'require'?

73

我刚接触ESLint,并且已经成功地将ESLint与IntelliJ集成。

默认情况下,我的ESLint集成不认识node,但是通过基本的文档查阅可以明确,在项目文件夹的根目录下创建名为.eslintrc的配置文件(使用正确的IntelliJ设置来访问该文件),并将"node":true设置为.eslintrc,ESLint便会识别node(即以下完整的.eslintrc可有效运行)。

// Contents of .eslintrc at root of project - support for Node and jQuery
{
  "env" : {
    "node" : true,
    "jquery" : true
  },
}

然而,正如这张截图所示,ESLint 仍然无法识别 require()

ESLint does not recognize <code>require()</code>

我已经在合理的时间内尽最大努力寻找解决方案来解决如何让 ESLint 识别 require() 的基本问题。特别是,我在这里找到了一个可能的线索(链接),它建议在 (我假设的).eslintrc 文件中添加"amd":false,但是没有效果。

这似乎是一个基础问题。我怎样才能让 .eslintrc 识别 require()

(如果您在回答中能够提供如何涵盖更一般情况的见解,那也会很有帮助。谢谢!)

4个回答

102

.eslintrc中添加amdenv,将使你能够按照amd规范使用define()require()

{
  "env": {
    "amd": true
  }
}

1
嗯。我尝试将"amd": true添加到我的.eslintrc文件中,但无法生效。我会再试试看。 - Dan Nissenbaum
你添加后重新启动了Sublime吗?(很抱歉问这个问题) - Nick Avi
"env": { "amd": true } - Nick Avi
@NickAvi 为什么你会认为 OP 在使用 Sublime?他们明确说了是 IntellJ,更不用说界面看起来根本不像 Sublime。 - Marko Gresak
1
啊,我转向了一个我认为看起来像Sublime的图片。 - Nick Avi
可能是Intellij和/或我的.eslintrc路径没有被识别。我已经设置了"amd":false并重新启动了IntelliJ,但仍然无法解决问题。不过现在我知道amd的解决方案确实应该生效,所以我会继续尝试调整IntelliJ / ESLint设置,以便访问我的.eslintrc文件。感谢您的帮助。 - Dan Nissenbaum

42
问题不在于ESLint。如果你仔细看一下你的信息,它说的是JSHint
由于你正在尝试配置ESLint,最简单的解决方案是禁用或从IDE中删除JSHint插件。
如果你仍然想要在ESLint中使用JSHint,则可以执行以下操作:
单文件解决方案:在文件顶部添加/* global require */
所有文件的通用解决方案:将"node": true行添加到你的.jshintrc中。

1
谢谢!我只是在潜意识里知道它们是不同的。你有什么建议,哪个更好?JSHint、ESLint...还是同时使用更有益? - Dan Nissenbaum
对于任何感兴趣的人,这里有一个比较JSLintJSHintJSCSESLint之间差异的链接:http://www.sitepoint.com/comparison-javascript-linting-tools/ - 从这个链接中,我会选择ESLint - Dan Nissenbaum
1
很难说。对于我写的少量JS(现在我主要使用TypeScript),我仍然使用JSHint,因为当我使用纯JS时ESLint还不存在。正如ESLint FAQ所说,两者都没有更好的选择。你应该考虑以下几点:ESLint具有完整的ES6支持,而我无法确认JSHint是否具备此功能。ESLint还支持许多代码风格规则(类似于JSCS),而JSHint明确放弃了这些规则,并建议使用JSCS进行这些检查,这是有一定道理的,但你需要使用两个工具。 - Marko Gresak
2
如果你打算编写ES6代码,ESLint可能是一个更好的选择,因为从我在快速搜索中了解到,JSHint仍然没有提供很好的支持 - 我可能在这方面是错的。它还可以强制执行一些基本的代码风格,但仍然没有添加所有复杂的规则,如果你关心的话,JSCS会有。如果今天我要选择的话,我可能会选择ESLint,因为它更加更新,并且更适合我的用例。对于这些长评论,抱歉,我希望这可以帮助你选择您的lint工具。 - Marko Gresak
关于 ESLint 和 ES6 支持的问题,我同意您的评论,特别是考虑到 lint 网站上的这个声明:“ES6 的一些功能很好,因此 JSLint 将识别 ES6 的好部分。”http://www.jslint.com/help.html - michaelok

4

1

在Mac上...全局解决方案。 (2021)

如果您正在Mac上使用令人惊叹的ESLint和令人惊叹的VS Code,

只需前往~(即/users/your-name

编辑.eslintrc.json(当然您可以在VSCode中编辑它!)

enter image description here

你很可能会添加

"node": true

如果你正在使用Node,或者像这里的答案所述的那样使用"amd"。("amd"只提供require和define)。这是一个适用于你打开的所有工作区的全局解决方案。重要的是,即使你在远程使用VS Code,所以没有工作区,这也可以工作。例如,你可以只使用sftp在服务器上打开文件,在VSCode中处理该文件。或者你可能只是打开Mac上的单个本地文件,而不是工作区的一部分。在这两种情况下,设置(例如,node=true)实际上将起作用 - 它不必是工作区。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接