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

时间:2015-01-04 21:42:33

标签: javascript gruntjs jshint grunt-contrib-jshint

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



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作为一个全局选项,就像在这篇文章中How to tell JSLint / JSHint what global variables are already defined一样。但是我不想把我在那里定义的变量放在那里,因为每个这样的变量都在我的源文件中。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

/* global Foo, Bar */

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

/* exported Foo */