Eslint从另一个文件中确定全局变量

Joh*_*nny 10 javascript eslint

我试图以这样一种方式设置ESLint,它在linting实际目标文件之前解析全局声明文件,这样我就不必将所有函数和变量声明为全局变量,而是将全局变量声明为全局变量.解析器数字出来:

some_module.js中:

function do_something() {
  if (glob_action("foobar")) {
     ... something something ...
  }
}
Run Code Online (Sandbox Code Playgroud)

globals.js中,我有一组实用程序和全局变量:

function glob_action(x) {
   ... something something ...
}
Run Code Online (Sandbox Code Playgroud)

那么我如何告诉ESlint在确定以下事实时包含global.js:

76:3  error  'glob_action' is not defined  no-undef
Run Code Online (Sandbox Code Playgroud)

实际上并没有未定义,但我不想将其列为全局:

/*global glob_action*/
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

/*eslint include "../globa.js"*/
Run Code Online (Sandbox Code Playgroud)

可能吗?怎么样?

小智 1

我强烈建议使用导入/导出机制,而不是让每个成员都全局可访问。

使用 ES6 模块时,您可以在globals.js中导出函数,如下所示:

export function glob_action(x) {
  ... something something ...
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要将其导入到some_module.js中才能使用它:

import { glob_action } from './globals.js';

// ...

function do_something() {
  if (glob_action("foobar")) {
     ... something something ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这样 eslint 就不会抛出错误。

您将需要在要使用它们的每个模块中导入资源,因此它并不像您请求的那样通用,但这样您就不会污染您的全局名称空间。此外,您不需要手动导入每个函数,因为您可以使用以下命令导入整个模块:

import * as globals from './globals.js'
Run Code Online (Sandbox Code Playgroud)

然后在您的文件中访问它们,如下所示:

globals.glob_action("foobar");
Run Code Online (Sandbox Code Playgroud)

有关从其他模块导入成员的更多信息,请参阅:https ://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/import。