使用带有requirejs的JSLint/Hint

Mar*_*one 10 javascript jslint requirejs jshint gruntjs

我目前正在为驱动的项目设置一个自动构建脚本(带有).因此我想在连接和缩小r.js之前对所有必需的文件运行/.由于js文件夹包含很多我不想lint的开发文件,我不能只传递给JSLint.我的第一个想法是运行r.js ,lint连接文件然后缩小它,但这不是一个选项有两个原因.首先它将包括我不想lint的供应商库,然后找到错误的行,找到它的类,在dev文件夹中找到相应的js文件,在那里修复它,再次运行r.js然后lint它再次,是我们的工作流程的麻烦.所以我正在寻找一种可能将linting连接到r.js优化器进程或至少以某种方式获取requirejs依赖树的列表,我可以解析并将其传递给lint.或者任何可行的自动化流程解决方案,您都会想到.js/**/*.jsoptimizer: 'none'

Rya*_*nch 1

这个答案有点绕过 Grunt,但它应该适合你想做的事情。我的方法是查看 r.js 并尝试重写一个函数,该函数接收正在加载的各个模块的路径,拦截模块名称,并在 r.js 加载和编译模块时对文件进行 lint 处理。我是这样做的:

var requirejs = require('requirejs');
var options = {/*r.js options as JSON*/};
var oldNewContext = requirejs.s.newContext;
requirejs.s.newContext = function(){
    var context = oldNewContext.apply(this, arguments);
    var oldLoad = context.Module.prototype.load;
    context.Module.prototype.load = function(){
        var module = oldLoad.apply(this, arguments);

        if(/\.js$/.test(this.map.url) && !/^empty:/.test(this.map.url))
            console.log(this.map.url);

        return module;
    }
    return context;
}
requirejs.optimize(options)
Run Code Online (Sandbox Code Playgroud)

然后,当您在模块上运行 requirejs.optimize 时,您应该将所有非空 JavaScript url 记录到控制台。您可以使用 url 来检查文件,而不是将它们记录到控制台。