Grunt 有什么用?
What is Grunt for?
我正在尝试进入 G运行t,这是我的新手,但我不了解它的实用性。
我明白这是一个任务运行ner。我知道它可以用来做诸如 bundle、uglify、jshint、minify 等等之类的事情,任何可以变成脚本任务的事情。
但我看不出这有什么好处。几乎所有这些都可以从命令行 运行 无论如何,这就是说您可以使用简单的 shell 脚本将它们组合起来。在我看来,设置 g运行t + g运行tfiles 和编写任务比编写 shell 脚本 更多 工作,而不是更少。
我错过了什么?
Grunt 基本上是一个在 NodeJS 之上编写的构建/任务管理器。我将其称为 Java 的 ANT 等效的 NodeJS 堆栈。以下是您希望在以下情况下使用 grunt 的一些常见场景:
- 您有一个项目,其中 javascript 个文件需要缩小,并且通常单独生成一个前端构建(以防您使用 JAVA 作为您的后端)。 (grunt-contrib-uglify)
- 当您在开发过程中将代码保存在您的计算机上时,您希望浏览器自动重新加载您的页面(可能看起来是一件小事,但相信我,这为我节省了很多时间)。 (实时重新加载)
- 当开发人员在他的机器上保存代码时,他希望显示 JS 错误/一般最佳实践违规的完整列表。 (grunt-contrib-jshint)
- 您有一个包含 SASS/ LESS 文件的项目,在开发过程中需要将其编译为开发人员计算机上的 CSS 文件,例如,每当他保存一个 SASS 文件时,您希望它自动编译为 CSS 文件,以便包含在您的页面中。 (grunt-contrib-sass)
- 您有一组前端开发人员在 UI 上工作,还有一组后端开发人员在后端工作,您希望前端开发人员使用后端 REST API 而不必每次都在自己的机器上编译和部署代码。如果您想知道,这对于典型的 Web 服务器设置是不可能的,因为浏览器不允许 XHR 跨域。 Grunt 可以为您设置一个代理,将您自己系统上的 XHR 请求在 grunt 连接服务器中重定向到另一个系统! (grunt-contrib-proxy, grunt-contrib-connect)
我不认为您的 shell 脚本可以完成所有这些。总而言之,是的,设置 Gruntfile.js 对于几乎没有接触过 javascript 的人来说是乏味的 / 是 nodeJS 的新手,我经历了与学习者相同的痛苦,但 Grunt 是一个了不起的作品的软件。一定要花时间为你的前端项目设置一个合适的 Gruntfile.js,你会感谢上帝让你的生活变得更轻松:)
与shell脚本的优势:
如果您为这些任务中的每一项都编写 shell 脚本,那么维护然后根据您的每一项需求进行自定义是很乏味的。 Gruntfile.js 其实很简单。有一个配置可以用来初始化它,指定要执行的任务、每个任务的源和目标。
与 Yeoman 上的项目种子生成器集成,Gulp 是另一个需要考虑的主要因素。 Yeoman 和 Gulp 带有带有智能默认值的 Gruntfile.js'。对于他的团队中唯一 UI 贡献者来说,这对我来说是无价的!
对于从事前端技术的人来说,如果你有不止一个人和你一起工作,他们很容易了解Grunt,这已经有很多文档了SO 上的答案,而不是了解您的 shell 脚本。这可能是大型团队的一个因素。
Grunt 的众多插件扩展了基本功能。除非你的 shell 脚本非常流行,而且非常模块化,否则我看不到为它构建的插件。这也扩展到在您的项目中包含新的前端技术。比如说,如果你明天想在你的项目中使用打字稿,你的 shell 脚本将需要合并它并用你自己的努力来解释它。使用 Grunt,它就像 "npm install " 和添加配置一样简单。
尽管我同意 , I still have to consider the disadvantages that are highlighted by Keith Cirkel in Why we should stop using Grunt & Gulp
中指出的大多数优点
因此,Grunt 开销抵消了一些优势,至少您应该在最终决定是否使用 Grunt 时考虑所有这些。
我正在尝试进入 G运行t,这是我的新手,但我不了解它的实用性。
我明白这是一个任务运行ner。我知道它可以用来做诸如 bundle、uglify、jshint、minify 等等之类的事情,任何可以变成脚本任务的事情。
但我看不出这有什么好处。几乎所有这些都可以从命令行 运行 无论如何,这就是说您可以使用简单的 shell 脚本将它们组合起来。在我看来,设置 g运行t + g运行tfiles 和编写任务比编写 shell 脚本 更多 工作,而不是更少。
我错过了什么?
Grunt 基本上是一个在 NodeJS 之上编写的构建/任务管理器。我将其称为 Java 的 ANT 等效的 NodeJS 堆栈。以下是您希望在以下情况下使用 grunt 的一些常见场景:
- 您有一个项目,其中 javascript 个文件需要缩小,并且通常单独生成一个前端构建(以防您使用 JAVA 作为您的后端)。 (grunt-contrib-uglify)
- 当您在开发过程中将代码保存在您的计算机上时,您希望浏览器自动重新加载您的页面(可能看起来是一件小事,但相信我,这为我节省了很多时间)。 (实时重新加载)
- 当开发人员在他的机器上保存代码时,他希望显示 JS 错误/一般最佳实践违规的完整列表。 (grunt-contrib-jshint)
- 您有一个包含 SASS/ LESS 文件的项目,在开发过程中需要将其编译为开发人员计算机上的 CSS 文件,例如,每当他保存一个 SASS 文件时,您希望它自动编译为 CSS 文件,以便包含在您的页面中。 (grunt-contrib-sass)
- 您有一组前端开发人员在 UI 上工作,还有一组后端开发人员在后端工作,您希望前端开发人员使用后端 REST API 而不必每次都在自己的机器上编译和部署代码。如果您想知道,这对于典型的 Web 服务器设置是不可能的,因为浏览器不允许 XHR 跨域。 Grunt 可以为您设置一个代理,将您自己系统上的 XHR 请求在 grunt 连接服务器中重定向到另一个系统! (grunt-contrib-proxy, grunt-contrib-connect)
我不认为您的 shell 脚本可以完成所有这些。总而言之,是的,设置 Gruntfile.js 对于几乎没有接触过 javascript 的人来说是乏味的 / 是 nodeJS 的新手,我经历了与学习者相同的痛苦,但 Grunt 是一个了不起的作品的软件。一定要花时间为你的前端项目设置一个合适的 Gruntfile.js,你会感谢上帝让你的生活变得更轻松:)
与shell脚本的优势:
如果您为这些任务中的每一项都编写 shell 脚本,那么维护然后根据您的每一项需求进行自定义是很乏味的。 Gruntfile.js 其实很简单。有一个配置可以用来初始化它,指定要执行的任务、每个任务的源和目标。
与 Yeoman 上的项目种子生成器集成,Gulp 是另一个需要考虑的主要因素。 Yeoman 和 Gulp 带有带有智能默认值的 Gruntfile.js'。对于他的团队中唯一 UI 贡献者来说,这对我来说是无价的!
对于从事前端技术的人来说,如果你有不止一个人和你一起工作,他们很容易了解Grunt,这已经有很多文档了SO 上的答案,而不是了解您的 shell 脚本。这可能是大型团队的一个因素。
Grunt 的众多插件扩展了基本功能。除非你的 shell 脚本非常流行,而且非常模块化,否则我看不到为它构建的插件。这也扩展到在您的项目中包含新的前端技术。比如说,如果你明天想在你的项目中使用打字稿,你的 shell 脚本将需要合并它并用你自己的努力来解释它。使用 Grunt,它就像 "npm install " 和添加配置一样简单。
尽管我同意
因此,Grunt 开销抵消了一些优势,至少您应该在最终决定是否使用 Grunt 时考虑所有这些。