Mar*_*one 10 javascript jslint requirejs jshint gruntjs
我目前正在为require.js驱动的项目设置一个自动构建脚本(带有gruntjs).因此我想在连接和缩小r.js之前对所有必需的文件运行jslint/jshint.由于js文件夹包含很多我不想lint的开发文件,我不能只传递给JSLint.我的第一个想法是运行r.js ,lint连接文件然后缩小它,但这不是一个选项有两个原因.首先它将包括我不想lint的供应商库,然后找到错误的行,找到它的类,在dev文件夹中找到相应的js文件,在那里修复它,再次运行r.js然后lint它再次,是我们的工作流程的麻烦.所以我正在寻找一种可能将linting连接到r.js优化器进程或至少以某种方式获取requirejs依赖树的列表,我可以解析并将其传递给lint.或者任何可行的自动化流程解决方案,您都会想到.js/**/*.jsoptimizer: 'none'
这个答案有点绕过 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 来检查文件,而不是将它们记录到控制台。
| 归档时间: |
|
| 查看次数: |
4987 次 |
| 最近记录: |