通常会通过声明每个JavaScript文件应该配置它在JSHint配置中使用的外部定义的全局变量来回答这个经常被问到的问题。
在我的情况下,我有库文件,定义了几百个函数。我有许多其他文件来调用这些库中的函数。
将每个库函数的名称复制并粘贴到JSHint配置中是很困难的。
是否有更可维护的方法来解决此警告?
理想情况下,这个问题的任何答案都适用于Eclipse插件。
答案 0 :(得分:2)
您应该检查globals
选项。
如果有大量无法手动管理的全局变量,最好的方法是命名它们或自动创建JSHint配置。
使用命名空间,类似于具有静态方法的类,您可以将相关的全局变量分组为单个对象的引用。我相信在现代编译器中,您应该期望在解析所述对象上的关联引用时看到一些性能改进。
var gardening = (function () {
var exports = {};
exports.water = function () {};
function till () {};
exports.till = till;
return exports;
})();
var debug = {
prettyPrint: function (obj) {}
inspect: function () {}
};
因此,与具有数十个肩对肩全局变量的blob相反,您可以提取一些对象来对其进行分组。创建这样的层次结构支持大脑的能力,为与其目的相关的功能构建树状解决方案。
如果你已经为你的项目实现了一些任务运行器(你可能已经这样做了),那么添加一些自定义任务来汇总来自源文件的全局变量就不会受到影响,因为这些可以用分数来计算,而不是通过手动方法合理管理。
#!/usr/bin/env node
// ./task.js
var fs = require('fs');
// Some pre-defined JSHint options
var jsHintOptions = {
maxerr: 10,
bitwise: true,
globals: {
foo: true,
bar: false
}
}
var cmd = process.argv[2];
if (cmd === 'author-jshintrc') authorJsHintRc();
// Hammer time!
function authorJsHintRc() {
var globals = [];
// Some fancy regular expression which can match
// the globals from your sources
var reMatchGlobal = /^\s+function\s([\w\d_]+)/gm;
var extractGlobals = function (name) {
var contents = fs.readFileSync(name).toString();
var matches = contents.match(reMatchGlobal);
globals.push.apply(globals, matches);
}
var registerGlobal = function (global) {
jsHintOptions.globals[global] = false;
}
// These are our problematic source files which contain
// too many globals to specify manually
[
'path/to/foo.js',
'path/to/bar.js'
].forEach(extractGlobals);
// Extend the jsHintOptions with the dynamically resolved globals
globals.forEach(registerGlobal);
// Author the project's .jshintrc
fs.writeFileSync('.jshintrc', JSON.stringify(jsHintOptions));
}
理想情况下,删除或扩展项目根目录中的.jshintrc
应该意味着Eclipse JSHint插件会对这些选项进行内省,并且项目JSHint错误应立即消失。