Grunt是用来做什么的?

81

我正在尝试使用Grunt,这是我不熟悉的东西,但我不明白它的实用性。

我知道它是一个任务运行器。我知道它可以用来做像捆绑、缩小、jshint、最小化等等任何可以转换为脚本任务的事情。

但我不明白这给了什么优势。几乎所有这些都可以从命令行运行,也就是说,您只需使用简单的shell脚本组合即可。在我看来,设置grunt + gruntfiles并编写任务比编写shell脚本更费力而不是更省力。

我对此有什么误解吗?


2
grunt可以帮助你轻松完成项目中的繁琐工作。它是一个任务运行器,可以优化JavaScript、CSS等文件。相比编写自定义shell脚本,使用grunt更加理想。设置grunt也相对简单。 - floor
1
我对Grunt非常陌生... 你能否给我关于如何使用Grunt构建Angular项目的建议? - Naanii
2个回答

147

Grunt基本上是一个构建/任务管理器,使用NodeJS编写。我会称其为Java的ANT在NodeJS堆栈中的等价物。以下是您希望在下列情况下使用grunt的一些常见场景:

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

我不认为您的shell脚本能够完成所有这些任务。总之,对于那些几乎没有接触过JavaScript / 刚接触nodeJS的人来说,设置Gruntfile.js确实很繁琐,我作为学习者也经历了同样的痛苦,但是Grunt是一款惊人的软件。花时间为您的前端项目设置正确的Gruntfile.js,您会感谢上帝使您的生活变得更轻松:)

与shell脚本相比的优势:

  1. 如果您为每个任务编写Shell脚本,那么维护和自定义工作将变得很繁琐。Gruntfile.js实际上非常简单。有一个配置项可以用来初始化它,指定要执行的任务、每个任务的源和目标。

  2. 与Yeoman、Gulp等项目种子生成器的集成是另一个重要因素需要考虑的。Yeoman和Gulp都带有具有智能默认值的Gruntfile.js。对于团队中唯一的UI贡献者来说,这对我来说是无价的!

  3. 对于从事前端技术的人来说,如果你有多人与你合作,让他们了解Grunt比让他们了解你的Shell脚本更容易。Grunt已经有很多在SO上的答案并且有良好的文档记录。这可能是大型团队中需要考虑的因素之一。

  4. Grunt的众多插件扩展了基本功能。除非您的Shell脚本非常流行且非常模块化,否则我不认为会有人为其构建插件。这也适用于在项目中包含新的前端技术。例如,如果您想在明天的项目中使用TypeScript,则需要修改您的Shell脚本并自己编写代码来支持。而使用Grunt,只需要执行 "npm install" 并添加配置即可。


14

我讨厌臃肿和不必要的复杂性,有时你会意识到你使用某个工具只是因为有人喜欢这个工具... - NeilG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接