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没有定义。我在这里想念什么?

4

2 回答 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/

于 2012-07-31T22:52:27.847 回答
2

布莱恩在这里。CodeKit确实在一个完整的全局上下文中检查您的文件。(也就是说,它首先将它们组合起来,因此在较早文件中声明的变量将在以后的文件中有效。这假设您使用 CodeKit 来组合文件,或者使用 @codekit-prepend/append 语句或拖放导入链接集在 CodeKit 本身中)。如果您以其他方式(例如构建脚本)组合您的 JS 文件,那么 CodeKit 不知道这些文件是一起的,因此它会分别检查每个文件。

您可以使用上面答案中的注释标志,也可以直接在 CodeKit 中配置 JSHint 的选项。查看首选项窗口(或项目设置区域,如果您的项目使用项目级设置)。您也可以在那里输入自定义全局变量,这将删除这些警告。

干杯!

于 2013-01-27T23:25:54.160 回答