【问题标题】:Silencing JSLint warnings in brackets消除括号中的 JSLint 警告
【发布时间】:2015-08-17 17:49:17
【问题描述】:

我刚刚开始了一个 gulp-angular Yeoman 项目并在括号中打开它,几乎所有我得到'something' was used before it was defined,特别是'angular' was used before it was defined。我搞砸了扩展和其他修复,但老实说,我不知道自己在做什么,也找不到任何好的文档。

我可以做些什么来消除整个项目中的这些警告?换句话说,我怎样才能避免在我项目的几乎每个文件中都使用/*global angular*/

这是我的控制器声明之一的快速示例:

/*global console*/

(function () {
    'use strict';

    angular
        .module('sbk')
        .controller('MainController', MainController);

    /** @ngInject */
    function MainController() {
        console.log('Woo!');
    }
})();

这会导致以下 JSLint 警告:

'angular' was used before it was defined.
'MainController' was used before it was defined.
'MainController' was used before it was defined.
Move the invocation into the parens that contain the function.

编辑:更新以使我的问题更清晰

【问题讨论】:

    标签: angularjs yeoman jslint adobe-brackets


    【解决方案1】:

    http://jshint.com/docs/options/#globals

    提供一个全局变量列表,你就完成了。

    不清楚你使用的是jshint还是jslint;你的标签是一个,你的文本是另一个。

    【讨论】:

    • 呃,我是一个 stackexchange 菜鸟,抱歉格式很糟糕。刚刚由上面的 .jshintrc 文件发布。那么我的 jshint 配置应该使 jslint 错误静音吗?
    • @Spencer 我认为 jshintrc 文件是用于 jshint 的,这并不奇怪。 jshint != jslint.
    • 嗯,是的,但我将问题标记为 jslint 并包含 jslint 错误,您将我发送到一个 jshint 站点,所以我很困惑。我是 jslint/hint 的新手,所以这个问题让我陷入了困境。
    • @Spencer 您说您在帖子中编辑了一个 jshintrc 文件——如果您使用的是 jslint,为什么还要编辑一个 jshint 文件?希望您能理解为什么会令人困惑。
    • 很抱歉给您带来了困惑。所以是的,问题在于 JSLint 错误。有什么想法可以让他们沉默吗?
    【解决方案2】:

    好的,请记住 JSLint 只是一个 JavaScript 文件,我使用的大多数 JSLint 插件都将源代码放在安装的某个地方(尽管 Visual Studio 插件将它嵌入到 dll 中!),所以你可以 总是让它做你想做的事[在合理的范围内]。

    在您的情况下,绝对最坏的情况是您使用您希望 JSLint 假定的命名空间初始化预定义变量列表始终被认为在范围内。我将向您展示如何在 Brackets 中全局设置它,这可能并不总是最好的做法,如果您正在 linting 另一个项目,没有 有 Angular,好吧,你搞砸了 JSLint。

    (老实说,我很失望 Brackets 在它的preferences.json 文件中没有global 作为全局变量。我想我应该提交一个补丁。)

    我们有很多方法可以做到这一点。我要为standard 对象添加一个命名空间。您还可以通过添加到全局变量的browser 集合(我的 Bracket 安装的 jslint 文件中的第 497 行)来限制它的曝光。我们还可以创建一个新的 JSLint 指令选项,类似于browser。这不是快速'n'脏,但可能是不提交括号补丁的正确方法。但现在,让我们做一个快速的“n”脏修复。

    我正在使用 Windows。如果你不是,YMWV。我不是每天都使用括号,所以我没有在生产编码环境中测试过这个。但是,如果有任何问题不起作用,我很想听听,我会看看是否能找出问题所在。


    TL;博士。只是代码,女士。

    如果您使用默认安装位置,您想要的 jslint.js 文件在这里:
    C:\Program Files (x86)\Brackets\www\extensions\default\JSLint\thirdparty\jslint

    (只是为了好玩,请注意我们使用的 JSLint 版本是 2011 年的!!?!来吧,括号家伙!)

    standard 在我的文件中位于第 974 行。这是它最初的内容:

    // standard contains the global names that are provided by the
    // ECMAScript standard.
    
        standard = array_to_object([
            'Array', 'Boolean', 'Date', 'decodeURI', 'decodeURIComponent',
            'encodeURI', 'encodeURIComponent', 'Error', 'eval', 'EvalError',
            'Function', 'isFinite', 'isNaN', 'JSON', 'Math', 'Number', 'Object',
            'parseInt', 'parseFloat', 'RangeError', 'ReferenceError', 'RegExp',
            'String', 'SyntaxError', 'TypeError', 'URIError'
        ], false),
    

    这是一个测试 JavaScript sn-p 我想使用我的全局对象 util 进行 lint:

    /*jslint sloppy:true, white:true */
    utils.spam();
    utils.spammySpam();
    
    smutils.spam();
    

    我们只需将, 'utils' 添加到standard,就完成了。

        standard = array_to_object([
            'Array', 'Boolean', 'Date', 'decodeURI', 'decodeURIComponent',
            'encodeURI', 'encodeURIComponent', 'Error', 'eval', 'EvalError',
            'Function', 'isFinite', 'isNaN', 'JSON', 'Math', 'Number', 'Object',
            'parseInt', 'parseFloat', 'RangeError', 'ReferenceError', 'RegExp',
            'String', 'SyntaxError', 'TypeError', 'URIError', 'utils'
        ], false),
    

    为了过于清楚,您可以将 'angular''MainController' 添加到您的 standard 对象中以代替 'utils'

    顺便说一句,Crockford(JSLint 的创建者和维护者)会讨厌我们这样做。我不真的责备他。

    现在我收到smutils 的错误,但不是utils。幸运的是,全局指令仍然适用于这个设置:

    /*jslint sloppy:true, white:true */
    /*global smutils */
    utils.spam();
    utils.spammySpam();
    
    smutils.spam();
    

    我们又对 JSLint 友好了。

    直接破解 JSLint 可能没有最受青睐的选项状态,但它确实有效。

    顺便说一句,回复:Dave 的评论,“IMO JSLint 已被普遍弃用,取而代之的是 JSHint 或 JSCS”,我不太确定。举个例子,Brackets 开箱即用的是哪个?关于 JSLint 最好的部分是必须发生多少更少的主观讨论才能让一个大型团队在同一页面上。相信我,Crockford 不会告诉你做一些无可辩驳的错误

    他可能会伤害你的感情,他可能会要求你做一些一开始会伤害你的事情,但我真的认为 JSLint 可以很多教一个团队关于 JavaScript 最佳实践的知识。在跳转到 JSHint 之前,值得在 JSLint 中生活一段时间。

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 2015-03-17
      • 1970-01-01
      • 2017-10-25
      • 2019-07-31
      • 1970-01-01
      相关资源
      最近更新 更多