JSLint.VS - Visual Studio 的 JavaScript 验证器
一个 Visual Studio 插件,使用 JSLint 来验证解决方案中的 JavaScript 文件。
引言
在这篇文章中,我希望能做一些与我之前的两篇文章完全不同的事情。如果你读过它们,你会发现它们是对各自主题的详细描述——有点像让你掌握某个主题全部知识的指南。
这样做的坏处是——它没有给读者留下任何实质性的东西。你不可能写一本“.NET 报表指南”就能设计出读者需要的报表。所以,这一次,我想提供一些你可以每天使用的东西,而无需消化这里呈现的知识或对其进行定制以满足你的需求。我想做一些简短、精炼、立即可用的东西。
在选择主题时,我有些自私。在我多年的编码生涯中,没有什么比 JavaScript 开发更能同时给我带来快乐和痛苦了。我的意思是,每次我需要写 JavaScript 时,就像迷恋上了一个坏女孩——你被她的魅力所吸引,以为几个小技巧就能搞定……但一旦你投入进去,情况就会变得一团糟,你就会感到迷失和沮丧。
对于女孩,我已经发展出一套借口(她喜欢钱,她喜欢被像垃圾一样对待的男人,等等),但对于 JavaScript,只有一个——因为它不是任何人的孩子,JavaScript 缺乏支持 proper 开发的工具。
幸运的是,在一个深夜浏览网页时,我偶然发现了 Douglas Crockford 的 JavaScript 视频教程。这位老人简直太牛了;如果你还没看过,并且你对 JavaScript 感兴趣,那就别浪费时间了——打开几包爆米花,观看视频(JavaScript 编程语言、DOM 理论、高级 JavaScript)。你将节省大量本该花费在阅读糟糕的 JavaScript 书籍/教程或谷歌搜索你无法理解的复制粘贴代码语句上的时间。
除了非常适合解释 JavaScript 之外,它们还引导我发现了JSLint,一个非常有用的工具,它能验证 JavaScript 代码,从而缩短你在浏览器中测试脚本的时间,让你更具生产力。看到它在实际应用中的效果后,我立刻开始思考如何将其集成到 Visual Studio 中。
展示你的实力
我想让用户能够对文件、代码片段进行 JSLint 验证,或者将 JavaScript 验证集成到构建过程中。
这是 JSLint.VS 在文件上的实际应用
还有,这是它在验证代码语句时的效果
最后,这是当程序员决定构建解决方案时 JSLint.VS 的实际应用
它是如何工作的?
JSLint.VS 是一个非常标准的 Visual Studio 插件。我不会深入讲解基础知识,所以如果你对插件缺乏了解,你可能需要阅读这样的文章来了解基本概念。
和任何 Visual Studio 插件一样,Connect
是处理 Visual Studio 事件并执行命令的主要类。在这个项目中,它被用来将 JSLint
条目注册到 VS 上下文菜单中,捕获 JavaScript 文件的更改,通知其他类何时开始构建解决方案,等等……
OptionsForm
是用户界面,允许配置 JSLint.VS。你可以在下面的图片中看到它的实际运行效果
最后,JSLintProcessor
是完成主要工作的类——在构建事件/用户请求 (Connect.cs) 以 lint 文件时,它会根据选定的选项(OptionForm.cs)构建错误列表。最大的问题是弄清楚用什么来运行 JavaScript 代码。在放弃在类中引用隐藏浏览器窗口的想法后(听起来太糟糕了,不是吗?),我转向了Windows Script Host。由于 WHS 进程启动需要一些时间,对于大型项目中的每个 JavaScript lint 文件启动一个单独的 WSH 进程几乎是不可能的。因此,在检查时,我将所有脚本合并到一个临时的 lint 文件中,然后拆分结果,以便在任务列表中提供指向原始脚本的链接。
总结一下刚才所说的,这里是显示上述类主要部分的类图。你还可以注意到附加的、不太重要的辅助类——用于保存数据(FileDataHolder
、JSLintOptionsItem
)以及将 JSLint
选项序列化到硬盘(DictionarySerializer
)。
我在代码中留下了很多注释,所以我确信如果你想进一步扩展这个插件,你会自己搞定的。通过评论请求我为你实现的功能始终是一个选择。
结论
正如引言中所说,我希望阅读这篇文章能让你的开发工具箱里多了一个有用的工具。在你开始玩弄源代码之前,最后再啰嗦一句——正如 Douglas 在他的演讲中说过的——JSLint
可能会侮辱你。如果你是普通的 JavaScript 开发者,在最初的几次运行中,你会被错误淹没,所以要准备好应对 JSLint
的通知,它们会告诉你——你的代码是垃圾。
另一方面,每个错误都附有对问题的简明描述(而这个网站包含对为什么偏好某种写法的详细解释)——这意味着通过修复错误,你将培养良好的 JavaScript 编码习惯。我们中间有越多的人具备这些习惯,未来我们就越能看到更易于理解和维护的 JavaScript 代码……让我们更容易共享和学习,同时努力实现 Web 2.0 所带来的巨大轰动。
参考文献
历史
- 2009 年 1 月 28 日 - 与构建集成相关的 bug 修复,CodePlex 页面(感谢 **Alexander Turlov & Frederick Staats**)
- 2007 年 12 月 11 日 - 更新插件以支持 Visual Studio 2008,进行了一些小的 bug 修复。
- 2007 年 11 月 25 日 - 文章的初始版本。