什么是Grunt?

我试图进入Grunt,这是我的新手,但我不明白它的实用性。

我明白这是一个taskrunner。 我明白,它可以用来做捆绑,uglify,jshint,minify等等等,任何可以变成一个脚本任务的东西。

但是我不明白这有什么优势。 几乎所有这些都可以从命令行运行,也就是说,您可以使用简单的shell脚本将它们组合起来。 在我看来,设置grunt + gruntfiles和编写任务比编写shell脚本有效,而不是更less。

我错过了什么?

Grunt基本上是一个写在NodeJS之上的构build/任务pipe理器。 我将其称为与ANT for Java相当的NodeJS堆栈。 以下是一些您想在下面使用grunt的常见场景:

  1. 你有一个JavaScript文件需要缩小的项目,并通常单独生成一个前端构build(如果你使用说你的后端JAVA)。 ( grunt-contrib-uglify
  2. 在开发过程中,当您在机器上保存代码时,您希望浏览器自动重新加载页面(可能看起来像是一件小事,但相信我为我节省了大量时间)。 ( 实时重新加载
  3. 当开发人员在他的机器上保存代码时,他想要显示JS错误/一般最佳实践违规的全面列表。 ( grunt-contrib-jshint
  4. 你有一个SASS / LESS文件的项目,在开发过程中需要在开发者的机器上编译成CSS文件。例如,当他保存一个SASS文件时,你希望它自动编译成一个CSS文件,包含在你的页面。 ( grunt-contrib-sass
  5. 您有一组正在开发UI的前端开发人员以及一组后端开发人员在后端工作,您希望前端开发人员使用后端REST API,而无需每次都编译和部署代码机器。 如果你想知道,这是不可能的典型的Web服务器设置,因为XHR不允许跨浏览器的跨域。 Grunt可以为您在grunt连接服务器上将自己的系统上的XHR请求redirect到另一个系统的代理。 ( grunt-contrib-proxy,grunt-contrib-connect

我不认为你的shell脚本可以完成所有这些。 总而言之,设置一个Gruntfile.js对于那些没有接触到javascript的人来说是很乏味的,对于nodeJS来说,我还是经历了同样的痛苦,但是Grunt是一个非常棒的软件。 请花时间为您的前端项目设置合适的Gruntfile.js,并感谢上帝让您的生活变得更加简单:)

Advantage vs shell脚本:

  1. 如果为这些任务中的每一个任务编写shell脚本,则需要维护并自定义每个需求。 Gruntfile.js其实很简单。 有一个configuration,你启动它,指定要执行的任务,每个的来源和目标。

  2. 与Yeoman,Gulp项目种子发生器的整合是另一个要考虑的主要因素。 Yeoman和Gulp带有Gruntfile.js'智能默认值。 对于团队中唯一提供用户界面的人来说,这对我来说是无价的!

  3. 对于正在从事前端技术工作的人来说,如果你有一个以上的人与你一起工作,那么他们很容易就可以了解到Grunt,这已经有很多文档上有很多答案了,而不是去了解你的shell脚本。 这可能是大型团队的一个因素。

  4. Grunt的众多插件扩展了基本function。 除非你的shell脚本非常stream行,并且非常模块化,否则我看不到为它构build的插件。 这也扩展到在您的项目中包含新的前端技术。 比如说,如果你想明天在你的项目中使用打字稿,你的shell脚本将需要把它和你自己的努力结合起来。 使用Grunt,就像“npm install”一样简单,并添加一个configuration。

尽pipe我同意接受答复中提到的大多数优点,但我仍然必须考虑Keith Cirkel强调的缺点, 为什么我们应该停止使用Grunt&Gulp

因此,一些优点是由Grunt开销反驳,至less你应该考虑所有这一切在你使用Grunt的最终决定,或不。