如何告诉 JSHint 在另一个 JS 文件中查找定义

How to tell JSHint to look for definitions in another JS file

本文关键字:文件 查找 定义 JS 另一个 何告诉 JSHint      更新时间:2023-09-26

这是问题所在:我在Grunt中使用JSHint。我有几个JS文件,它们最终会合并成一个文件。但在合并之前,我想运行JSHint。但是,JSHint抱怨一些未定义的变量。下面是一个示例:1. JavaScript/file_one.js 定义了一个变量:var Foo = (function (){}());2. JavaScript/file_two.js 使用该模块。新福()。

jshint: {
            files: ['Gruntfile.js',
                    'javascript/**/*.js',
                   ],
             options: {
             // some options.
         }
}

JSHint抱怨Foo没有在file_two.js中定义。

以下是我的目标(如果可能的话):1.我想在单独的文件中拥有代码。因此,某些变量可能在不同的文件中定义。2. 我想让JSHint检查源JS文件。我不想将所有JS文件合并为一个并让JSHint检查合并的文件。3. JSHint 可以检查 <%= jshint.files %> 中的所有文件(例如 javascript/**/*.js)并查找定义。

我知道有一个解决方法是将Foo作为选项中的全局变量,就像这篇文章中如何告诉JSLint/JSHint已经定义了哪些全局变量。但我不想把我定义的变量放在那里,因为每个这样的变量都在我的源文件中。

所以我的问题是是否有办法实现我的目标 3 告诉 JSHint 在其他文件中查找定义。

使用以下方法,其优点是根本不使用 JSHint 配置

在第一个文件(为变量提供初始值的文件)中:

var username = "guest";   // it becomes: window.username

在另一个(第二个、第三个)文件中:

var username = window.username;

各种注意事项:

通过使用 var 声明,它成为窗口(全局)对象(window.username)的属性。使用 var ,这样您就可以多次声明它(let不能这样做)。

使用函数表达式(不是函数声明)的函数也可以这样做。

如果变量是对象(例如,函数)或不需要更改其值,则还可以在第二个文件中使用 let。另一种选择是根本不在第二个文件中声明它。在这种情况下,每次使用时都使用 window

console.log(window.username);

使用这种技术,它还有一个额外的优势,即您可以将"超全局"变量(使用 var 声明并附加到全局对象 - 窗口的变量)与"仅全局"变量(使用 let 声明,您应该这样做,并附加到全局上下文而不是全局对象)。

你的目标无法实现。JSHint 将在您的 .jshintrc 或您的 Gruntfile 中查找配置。唯一可以进行的其他覆盖是在单个文件中本地进行。

如果您依赖于全局变量,则应禁用该设置,覆盖以在配置或每个文件中指定每个变量,或将它们全部放在命名空间中。

我强烈建议切换到模块模式,并禁止任何泄漏到全局范围内的内容

你需要

在file_two.js中告诉JSHint它使用的全局变量

/* global Foo, Bar */

对于file_one.js,您将收到一条消息,指出Foo已定义但未使用。所以你需要告诉JSHint其他文件会使用它

/* exported Foo */