ESLint no-undef规则:另一个文件中的许多函数

3
问题是关于如何告诉eslint,如果函数在另一个文件中,则不显示错误? 例如:
--- core.js --- 一些核心代码,没有包含utils定义。
function draw() {
  const color = getRandomColor();
  canvasClear();
  drawNode();
  drawLevel();
  drawLine();
  drawCaption();
}

--- draw-utils.js --- 函数声明

function getRandomColor() {...};
function canvasClear() {...};
function drawNode() {...};
function drawLevel() {...};
function drawLine() {...};
function drawCaption() {...};

当然,有很多eslint的“no-undef”错误,因为没有这些函数的声明。第二个文件也充满了“no-unused-vars”的错误。
有没有一种方法可以告诉它们?而不需要在.eslint.json中使用“globals”部分。

通常最好使用某种模块系统,而不是依赖于全局作用域中的内容。 - Jared Smith
当然,模块是很好的,但如果我理解正确,浏览器没有原生支持模块。因此,我需要使用像webpack这样的模块捆绑工具来获取一个源代码包。但我试图解决的问题是将一个文件分成几个文件。而且eslint让我很烦恼。 - Nick_Rimer
您的信息已经过时了。原生模块在全球市场份额超过7%的所有浏览器中都得到了支持。这种情况已经持续了一段时间。而且,ESLint是可配置的,正是为了这个原因。 - Jared Smith
@JaredSmith 嗯...我会考虑一下的。我在两周前尝试了最新版的Google Chrome模块,但是项目无法正常工作:) 需要进行更多测试。 - Nick_Rimer
我并不试图描绘一个比事实更美好的情景。我已经在生产中使用本地模块一年多了(我通常不需要支持奇怪的浏览器,我的80%项目是内部的而非公共面向的)。唯一的问题是第三方集成:大多数库,如果你很幸运,是为webpack编写的(不兼容当前的本地实现),或者如果你不幸,是common js。很少有库能很好地与本地模块配合使用。 - Jared Smith
无论如何,所有这些都有点学术性。底线是,将所有内容倾泻到全局范围内,绝对没有封装(甚至不是旧的揭示模块设计模式),比任何一个 linter 可能捕获的问题都要严重得多。这就是为什么当将所有内容倾泻到全局范围时,您的 linter 没有配置正确工作的原因。 - Jared Smith
1个回答

0
请查看 no-undef文档。在JS文件本身中添加globals部分。
/*global someFunction b:true*/
/*eslint no-undef: "error"*/

var a = someFunction();
b = 10;

1
那么我需要污染我的js文件头而不是.eslintrc.json的污染吗?这似乎不是一个好主意,我认为。 - Nick_Rimer
@Nick_Rimer — 你必须在某个地方声明它们,这可以是所有JS文件的配置中、这个 JS文件的配置中或使用模块系统。代码检查工具无法区分在另一个文件中声明的变量和仅仅名称错误的变量。 - Quentin
3
为什么没有列出文件路径以搜索声明的功能呢?当然这是一个问题要问eslint开发者,不是你需要回答的。 - Nick_Rimer
@Nick_Rimer 当你发现某些看似应该存在但实际上不存在的东西时,这或许是一个巨大的机遇,也有可能是你理解上的漏洞。不管怎样,都对你有好处。 - Jared Smith

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