如何使用grunt linting单个javascript文件时解决依赖关系?

tim*_*mkg 8 javascript backbone.js jshint gruntjs

我想将我的应用程序逻辑分成多个Javascript文件,以保持理智和开发人员友好,存储在/ src文件夹中.在构建过程中,这些文件应该被打印并连接到/dist/app.js中.我正在使用grunt进行构建过程,因为它已经提供了方便的lint和concat任务.


    +
    |- grunt.js
    |- readme
    |-vendors
       |-backbone.js
    |- src
       |- core.js
       |- user.js
    |- dist
       |-app.js

我遇到了一个恼人的问题.我将backbone.js用于应用程序结构,我的大多数源文件都是通过扩展Backbone.Model来定义模型.当linting这些文件时,JSHint抱怨没有定义Backbone,这是正确的 - 骨干位于其自己的目录之外.按照正确的顺序包含所有必要的脚本是我假设在html中完成的.每个单独的源文件应该只知道自己.

我知道我可以通过将grunt.js中的lint的undef标志设置为false来抑制这些未定义的警告但是我想将它设置为true以便在我的应用程序中警告其他未定义的变量,因为它是一个常见的指针错误指针.有没有一种干净的方法来告诉grunt(或lint)在linting之前要包含哪些文件?我的构建过程或应用程序架构有问题吗?或者这只是我必须忍受的东西?

Der*_*ley 11

这些jshint选项允许您在grunt.js文件中指定来自您正在使用的其他库的全局变量列表:



    jshint: {
      options: {
        curly: true,
        eqeqeq: true,
        immed: false,
        latedef: true,
        newcap: true,
        noarg: true,
        sub: true,
        undef: true,
        boss: true,
        eqnull: true,
        browser: true
      },

      globals: {
        jQuery: true,
        Backbone: true,
        _: true
      }
    },
Run Code Online (Sandbox Code Playgroud)

请注意globals底部的设置.这允许JSHint忽略这些变量,但仍然运行您的undef: true设置(如上所示).

  • 在答案中向示例`globals`添加类似`core.js`的内容将有助于清晰.我是从Web Storm的角度出发,想知道如何在我意识到可以将它们添加到文件之前添加在我自己的lib中定义的项目.可能还想提一下,您可以使用`/*全局键:value,..*/`语法将选项添加到单个文件中 (2认同)
  • 在我将选项对象中的全局对象移动之前,我继续得到"'foo'未定义". (2认同)