【发布时间】:2011-12-04 21:00:35
【问题描述】:
我正在启动一个新项目 - 一个相当大的应用程序 - 仅包含 JavaScript 代码(除了一点 HTML/CSS),并且一直在考虑合适的构建过程和可用的工具选项。我很想听听最近有类似选择的人的意见。
一些要求
我确实有一些基本要求(我以后可能会添加更多花里胡哨,但这些确实是必要的):
- 代码缩小:我希望在暂存/生产构建中使用这个选项非常积极(想想Closure Compiler with advanced optimisations。)
- 代码质量检查:JSLint 或类似的 - 用于抛出任何明显代码问题的东西。
- 单元测试:在单元测试 JS 方面,我非常喜欢 JsTestDriver - 能够同时(并且快速!)测试多个浏览器并轻松实现自动化是主要吸引力。也就是说,我很乐意寻找替代方案。
- 持续集成友好:我们使用 CI 服务器(BuildBot,作为记录),任何构建脚本都必须轻松自动化。
可能的解决方案
我已经想到了几种可能性(有些细节是猜测,请纠正我):
蚂蚁
优点:
- 似乎涉及的工作最少,尤其是因为出色的HTML5 Boilerplate build script 作为起点
- 许多工具是用 Java 编写的(或有包装器) - 包括 JSLint/Hint、Closure Compiler 和 JsTestDriver
- Ant 脚本是 CI 服务器的标准配置
- 愉快地跨平台
缺点:
- 运行许多 JAR 文件可能有点慢? (我在考虑初始化而不是执行)
Ruby/Rake
优点:
- (写得很好)Ruby 脚本可能比成堆的 XML 更容易处理
- 许多相关工具都有包装器(通常是宝石),例如 JSLint、JSTestDriver 和 UglifyJS
- 同样跨平台
缺点:
- 涉及修改构建过程的 Ruby 知识。虽然这不是什么大不了的事,但我们不是 Ruby 商店,替代品的进入门槛也不完全相同
- 很少有工具实际上在 Ruby 中运行,并且实际上是 Java 或 JavaScript 代码执行的包装器 - 这似乎可能会减慢速度
节点(可能类似于Jake)
优点:
- JavaScript 中可用的大量工具(以及 Node 可用的模块) - JSLint/Hint、UglifyJS 等。
- 大概很快(this blog post 说明 UglifyJS 非常全面地超过了 Closure Compiler,例如)
缺点:
- Windows 上似乎还没有节点(尤其是 NPM)(我们有一些开发人员在运行 Windows)
- 似乎没有任何现有支持从 Node 应用程序使用 JsTestDriver(但可以编写包装器)
基于此,Ant 似乎是目前的最爱。
【问题讨论】:
-
html5 样板 build.xml 不是很好 - 你会想要远离 ant-contrib。这是获得无法维护的垃圾的最快方法。我建议你远离蚂蚁。如果你这样做——让蚂蚁成为蚂蚁,不要试图让它感觉像一种脚本语言。
-
可能带有一些插件的 Gradle。 eriwen.github.io/gradle-js-plugin ?
标签: javascript build continuous-integration