禁止将延迟导入引入全局变量

在非系统模块作用域中,禁止将延迟导入项引入 windowglobalThis

将导入项引入 window 作用域(或 globalThis)会与同一窗口中的所有其他内容共享导入的全局变量。在模块中,这通常是不必要且不可取的,因为每个模块都会导入其所需的内容。此外,通过全局作用域共享项会使代码风格检查工具更难以确定可用的全局变量。

相反,全局变量应该直接导入,或者导入到一个延迟对象中。如果出于某种充分的理由需要通过 window 作用域共享全局变量,则可以禁用此规则,但前提是在添加的注释中解释原因。

此规则的错误代码示例:

ChromeUtils.defineESModuleGetters(globalThis, { foo: "foo.sys.mjs" });
ChromeUtils.defineESModuleGetters(window, { "foo": "foo.sys.mjs" });
ChromeUtils.defineLazyGetter(globalThis, "foo", () => {});
ChromeUtils.defineLazyGetter(window, "foo", () => {});

此规则的正确代码示例:

const lazy = {};
ChromeUtils.defineLazyGetter(lazy, "foo", () => {});