1

这就是问题所在:我在 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 在其他文件中查找定义。

4

3 回答 3

1

在 Web 应用程序中,我更喜欢以下内容,它的好处是根本不使用 JSHint 配置

在主文件(赋予变量初始值的文件)中:

var username = window.username;
username = "guest";

在其他(次要)文件中:

var username = window.username;

各种注释:

这是一个全局变量,所以我将它分配给窗口(全局)对象。他们都指向同一个东西—— window.username. 我使用var,所以我可以多次声明它(let不能这样做)。

使用此方法,您可以稍后将全局变量(使用 声明的变量)var本地let变量(使用 声明的变量)区分开来。

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

于 2021-05-20T21:05:30.980 回答
0

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

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

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

于 2015-01-04T22:19:03.557 回答
0

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

/* global Foo, Bar */

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

/* exported Foo */
于 2015-11-05T16:07:24.033 回答