JSHint在CodeKit中报错:Backbone未定义

8
一个小的测试应用程序设置如下:
init.js:
//@codekit-prepend "vendor/jquery-1.7.2.js"
//@codekit-prepend "vendor/underscore.js"
//@codekit-prepend "vendor/backbone.js"

// Setup namespace for the app
window.app = window.app || {};

//@codekit-append "models/Ride.js"

Ride.js:

(function() {
    window.app.Ride = Backbone.Model.extend({

        initialize: function() {
            console.log("Ride initialized");
        }
    });
})();

CodeKit的JSHint检查报告显示Backboneconsole未定义。我在这里缺少什么?
2个回答

18

JSHint不能运行您的代码,因此它不知道您在其他文件中引入的任何模块。您必须明确告诉它您计划在Ride.js中使用的所有全局变量,例如: /*global Backbone */。默认情况下禁用console,因为在软件中包含填充的console.log调用并不是一个好主意。要消除此警告,您可以使用/*jshint devel:true */

因此,最终您的文件应如下所示才能通过JSHint检查:

/*jshint devel:true */
/*global Backbone */

(function() {
    window.app.Ride = Backbone.Model.extend({

        initialize: function() {
            console.log("Ride initialized");
        }
    });
})();

更多信息请点击此处:http://www.jshint.com/options/


1
我原本以为CodeKit在将所有文件合并后会对整个文件进行JSHint检查,而不是逐个检查每个文件。也许我错了。 - ipavlic
@ipavlic,你有没有想过如何关闭Bryan Jone的CodeKit(incident57.com)?我很想在压缩文件中删除console.log,但在开发时忽略jshint控制台未定义警告。 - Ryan
太棒了。我已经将 /*global Modernizr */ 添加到文件顶部,CodeKit 不再出现烦人的提示信息了,Anton,我感激不尽! - Jake

2

您好,我是Bryan。CodeKit会在全局上下文中检查您的文件(也就是说,它首先将它们组合起来,因此在较早的文件中声明的变量将在后面的文件中有效。这假定您使用CodeKit将文件组合起来,可以使用@codekit-prepend/append语句或在CodeKit本身中设置拖放导入链接)。如果您以其他方式组合JS文件(例如构建脚本),那么CodeKit不知道这些文件是如何组合在一起的,因此它将单独检查每个文件。

您可以使用上面答案中提到的注释标记,或者直接在CodeKit中配置JSHint的选项。请参见首选项窗口(或项目设置区域,如果您的项目使用项目级别的设置)。您还可以在那里输入自定义全局变量,这将消除那些警告。

谢谢!


它似乎有点有 bug?当我的函数在成功调用中时,它无法识别它,即使它们都与 CodeKit 结合在一起。 - Alisso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接