当您不熟悉前端开发并开始精通HTML5,CSS和JavaScript时,显而易见的下一步就是动手使用工具 大多数开发人员用来在这个复杂的空间中保持理智。 通过使用Less编写CSS工作表时,您也应该具有更多的灵活性和功能。 您也应该通过减少JS代码来优化带宽。 您也应该能够使用JSHint自动检查您的JS代码是否良好。

您应该得到所有这些好东西。

因此,您开始手动使用所有这些出色的工具,手动运行越来越多的命令行。 有时,您忘记了运行Less编译器…有时,您忘记了运行JSHint并附带了一个错误……

突然间,您发现自己想知道:是否有解决方案可以自动化所有这些工具? 您如何创建可重复的工作流程以防止犯错?

显然存在一个解决方案,尤其是有两个工具正在等待您入门: GruntGulp

作为使用这些工具的新手,您想知道它们如何工作以及使用哪个工具,不是吗? 好吧,那么完美,您正在阅读正确的文章!

1.我们将使用的样本

我将通过一个非常简单的示例为您提供使用Grunt和Gulp的基础,您可以从GitHub下载该示例。

这是一个由三个文件组成的简单网站:


与使用标准CSS文件相比,Styles.less以更丰富的方式定义了CSS工作表。 最后,我们使用Less编译器创建一个styles.css文件。 通过使用Less,我们可以使用CSS文件中的变量:


在此《 入门指南》中获取有关“更少”的更多信息。

JavaScript和HTML代码非常简单。 该页面应如下所示:


2.了解Node.js程序包管理器

您需要首先了解Node.js程序包管理器(npm)的工作方式。

Npm是Node.JS随附的工具。 它用于获取工具和框架,同时自动解决它们之间的依赖关系。

例如,要使用Less并将其编译为Web可用CSS文件,您首先需要使用以下命令安装Less:

npm install -g less

注意:要获取npm命令行,必须从Node网站安装Node.js。

完成此操作后,您可以运行以下命令将.less文件编译为.css:

lessc styles.less > styles.css

Npm使用它创建的文件并将其存储在其正在使用的本地文件夹中: package.json 。 该文件使用JavaScript对象表示法(JSON)格式,使npm知道安装了哪个工具和版本以及当前project (由当前文件夹表示)使用的框架。

该文件对Grunt和Gulp很重要,因为它将包含已下载并在自动化工作流程中可用的插件列表。

要创建一个空的package.json文件,可以使用以下npm命令:

npm init

您将遇到一些可以使用默认选项回答的问题,然后就可以开始了。

在此文件中,您将具有两种依赖关系:

  • 执行您的Web应用程序或Node.js应用程序所需的
  • 开发阶段所需的代码(例如Less),用于编译或检查代码

Npm基本上为您提供了三种安装软件包的方法:

  • 使用–g-global选项在您的计算机上全局
  • 出于执行目的,不使用任何选项在您的项目文件夹本地(仅npm install [tools or framework])
  • 出于开发目的,使用--save-dev选项在本地项目文件夹中

第三个将在package.json文件中创建一个devDependencies部分/属性。


3.咕Gr

什么是咕unt声?

Grunt是JavaScript自动化工作流领域的先驱。 有很多已知的Grunt用户,例如Twitter,jQuery和Modernizr。

Grunt的基本原则是给我们一种简单的方法来运行tasks 。 任务是已经为您创建的一组代码文件和配置文件。 您可以通过安装将使用npm获得的Grunt插件来获得新任务。 您可以找到几乎可以使用的所有工具的插件,例如Less和JSHint 。

要运行Grunt,您必须创建一个Gruntfile,在其中指定要运行的任务以及每个任务的配置。 完成此操作后,您只需运行grunt命令行即可指定要运行的任务(默认任务或特定任务),它将自动完成。

现在,让我们通过逐步指南进行设置。

步骤1.创建Package.json文件

使用npm初始化文件:

npm init

您将必须回答一些问题,例如项目名称以及默认的.js文件是什么。 您还可以选择手动创建文件并将其内容设置为:

{"name": "project-name","devDependencies": {},"dependencies": {}}

步骤2.在全球和本地安装Grunt

您需要全局安装Grunt以获取命令行,并在本地安装Grunt来初始化项目所需的一切。

跑:

npm install -g grunt

然后在本地运行:

npm install grunt --save-dev

注意:不要忘记–dev部分将其指定为package.json文件中的devDependencies之一。

步骤3.创建GruntFile.js

Grunt使用名为gruntFile.js的文件工作。 该文件包含Grunt所需的所有内容,即:

  • 任务配置
  • 定制任务
  • 任务加载

Grunt希望文件导出一个函数,该函数带有一个名为“ grunt”的参数。 您将使用该对象执行所有Grunt相对操作。

这是一个最小的gruntfile,它仅读取package.json文件并创建一个不运行任何内容的default任务。

注意:将文件与package.json文件并排放置在项目文件夹中。

module.exports = function(grunt) {// Project configuration.grunt.initConfig({pkg: grunt.file.readJSON('package.json'),});// Default task(s).grunt.registerTask('default', []);};

您可以执行它以确保正确配置了所有内容。

为此,请在项目文件夹上打开命令提示符并运行:

grunt

您应该会看到以下内容:


步骤4.添加您的第一个任务:JSHint

现在您的Gruntfile已经准备好了,下一步就是添加一个插件并使用它。 所有插件都可以在Grunt网站上的列表中找到。 Gruntfile中执行的常见任务之一是检查JavaScript语法是否正确。 为此,我们通常使用JSHint。

让我们将其添加到您的grunt工作流程中。

如果在grunt插件页面上搜索JSHint ,您将找到grunt-contrib-jshint ,它与我们需要的相对应!

在项目文件夹中,运行:

npm install grunt-contrib-jshint --save-dev

完成一项操作,您必须将其添加到Gruntfile.js中。 为此,有两个简单的步骤:

  1. 加载插件。
  2. 配置任务。

要加载插件,请使用loadNpmTasks函数:

// Load the plugin that provides the "jshint" taskgrunt.loadNpmTasks('grunt-contrib-jshint');

配置在initConfig完成 函数,您必须向参数中给定的对象添加新属性。 这必须是您要添加的任务的名称,并且与您使用的插件有关。 知道该名称和该任务的可用选项列表的最佳方法是查看插件文档。 您将始终找到有据可查的示例。

例如,在我们的示例中,我们要检查除gruntfile.js之外的所有JavaScript文件。 我们还希望激活一组规则以检入诸如eqeqeq之类JavaScript文件,以确保在需要时使用eqeqeq

这是修改的initConfig函数:


您可以使用以下命令行(在其中将任务名称指定为grunt的参数)来运行任务:

grunt jshint

结果在这里:


您只需要运行该命令,它将自动提示您遇到的任何错误。

恭喜,您现在可以在工作流程中自动化完成任务!

步骤5.添加第二项任务:更少的编译

您的JSHint任务运行良好,但在工作流程中仅此一点。 通常,我们使用Grunt之类的工具来运行多个任务。

添加更多它们确实很容易,因为您只需遵循相同的步骤。 假设您现在要在自动化过程中为您的less文件添加编辑。 如果您搜索Grunt插件,则会发现一个无需grunt-contrib的插件,您可以将其安装在项目文件夹中:

npm install grunt-contrib-less --save-dev

与JSHint任务一样,您必须添加配置:


然后,加载任务:


您现在可以运行Grunt并指定less任务:这只会启动Less。 可以,但是您想运行所有任务,对吗? 那是default的角色 任务。

当您只运行grunt而不指定任何任务时,它将搜索default任务并运行其数组中指定的所有任务。 您可以修改它,使其运行lessjshint运行jshint 请注意,要添加一组类似于default的任务,您需要调用registerTask 功能:


从现在开始,当您运行grunt ,它将运行jshint ,然后运行less


您可以添加所需的任何任务,还可以指定其他任务组,例如default ,并通过将其名称作为参数传递给grunt命令行来调用它们。

容易吧?

步骤6.使用监视,因此您不必手动运行Grunt

现在,您是一个快乐的开发人员。 您的所有重复任务在grunt工作流程中都是自动化的,您只需运行grunt即可执行。 但这可以更轻松地完成。 它可以自动完成。

为此,您可以添加一个名为watch的特定任务。 该任务将不断检查您的工作文件夹,并且根据规则,在修改文件时,grunt将运行关联的任务。

首先,在您的项目文件夹中安装watch

npm install grunt-contrib-watch --save-dev

与其他所有任务一样,使用loadNpmTasks函数加载它并进行配置。 此处的config部分有所不同,因为您需要为要使用watch覆盖的每个任务指定一个配置。


有关更多信息,您可以阅读此任务的完整文档 。

要激活watch ,只需运行以下命令:

grunt watch

每次更改文件并且此文件在特定任务的监视文件范围内,它将执行任务。


就是这样! 现在,您已经知道使用grunt创建自动化工作流的一切。

4.大口吃

什么是格尔普?

Gulp是咕gr的替代品。 它是较新的,并且比咕unt声更灵活。 在选择将要使用的那个之前,让我们看一下gulp的工作原理。

Gulp是工作流自动化工具。 像grunt一样,它可以使用npm和package.json文件工作。 所有可用的插件也将使用npm下载,并作为devDependencies添加到package.json文件中。

主要区别之一是Gulp使用流。 流是一组函数,通过这些函数文件可以在内存中进行修改。 该文件仅在过程结束时才会写入磁盘,因此效率更高。 另一方面,艰巨的任务却像孤岛一样工作,无法链接。

让我们通过一些简单的步骤快速了解Gulp的工作原理。

步骤1.创建Package.json文件

与Grunt相似,您首先必须创建package.json文件。 您可以使用与grunt示例完全相同的技术。

第2步。在全局和本地安装Gulp和Gulp-Util

创建package.json文件后,请使用以下命令在全局和本地安装gulp:

npm install -g gulp

npm install gulp --save-dev

这将安装gulp命令行以及运行gulp工作流程所需的一切。

然后,您必须安装gulp utils,其中包含其他插件共享的常用功能:

npm install gulp-util --save-dev

最后,创建最小的gulp文件,该文件如下所示:


如您所见,它与grunt语法有点不同。 在gulp中,如果您是Node.js开发人员,则使用require语法加载插件。 还有一个使用gulp.task函数定义的default任务。

如果你gulp 命令行在项目文件夹中使用命令提示符,您应该看到如下结果:


步骤3.使用第一个任务:减少编译

要在gulp中使用插件,请使用与创建default任务相同的功能。 这是因为您不必使用特定的名称来创建任务。 您只需调用gulp.task ,设置所需的名称,然后为其提供JavaScript函数作为第二个参数。 当gulp运行任务时,它将运行此功能。

要使用插件,请使用在需要时选择的名称来调用它。 通常,您将其称为流工作流的一部分,通常从选择文件开始。 这是通过gulp.src函数完成的。 它将选择一堆文件并返回一个流,该流可以被使用pipe的另一个函数使用。 这样就可以链接多个动作,而无需将它们写入磁盘。 您只需将流从一个插件传递到另一个插件即可。

这是Less的基本示例:


我们首先require ('gulp-less') 为gulp加载less插件。 (我们使用npm install gulp-less --save-dev获得了它)。

然后gulp.src将选择所有.less文件,我们将其“管道”到less() 的功能,它最终是“管道”到gulp.dest 指示将结果写入何处。 由于gulp.src可以选择多个文件,因此gulp.dest指定了一个文件夹。

一旦了解了管道模型,就可以轻松获得与使用grunt获得的结果相同的结果。

gulp的强大功能在于,您可以创建自定义任务,在其中您可以调用多个插件,并可以在其中以所需方式将其关联。

注意:显然还有一个gulp-watch插件,可用于自动启动工作流程!

结论:选择哪一个?

我希望您现在对为什么需要自动化工作流程以及如何使用Grunt或Gulp来获得更清晰的了解。

选择其中一项与您要完成的任务更相关。

Grunt易于使用。 您不必了解管道系统,完成简单的任务将更加简单。 这是一个非常成熟的工具,许多知名编辑和开发人员都在使用它,并且有许多可用的插件。

就是说,Gulp的设计方式可以为您提供很大的灵活性。 它已经存在了很长一段时间,即使您找不到与Grunt一样多的插件,所有经典的插件都可以用于Gulp。

如果您使用真正的标准工作流程以及JSHint,uglifying,CSS验证等常见步骤,那么Grunt是一个不错的选择。 如果您要完成更复杂的任务,Gulp将是一名出色的边锋。

微软在许多开源JavaScript主题上有很多免费的学习方法,并且我们的使命是使用Microsoft Edge创建更多内容。 这里有一些要检查的:

还有一些免费的入门工具: Visual Studio Code , Azure试用版和跨浏览器测试工具 -均适用于Mac,Linux或Windows。

本文是Microsoft的Web开发技术系列的一部分。 我们很高兴与您分享 Microsoft Edge 和新的 EdgeHTML渲染引擎 获取免费的虚拟机或在Mac,iOS,Android或Windows设备上@ http://dev.modern.ie/ 进行远程测试

翻译自: https://code.tutsplus.com/tutorials/javascript-workflow-automation-using-grunt-and-gulp--cms-24586

使用Grunt和GulpJavaScript工作流自动化相关推荐

  1. 推荐一个工作流自动化工具

    以下文章来源方志朋的博客,回复"666"获面试宝典 今天,要和大家分享一个"开源"工作流自动化工具--n8n ,简单来说,它是一个与其他应用程序集成的应用程序, ...

  2. 推荐一个强大的工作流自动化工具...

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 今天,要和大家分享一个"开源"工作流自动 ...

  3. 开源工作流自动化工具n8n

    在『 IFTTT的开源替代品 』一文中,老苏提到了 n8n ,这是一款基于节点的工作流自动化工具,可以实现当 A 条件发生,触发 B 服务这样的自动工作流程. 什么是 n8n ? n8n 是免费的基于 ...

  4. 开源工作流自动化神器 n8n

    在『 IFTTT 的开源替代品[1] 』一文中,老苏提到了 n8n ,这是一款基于节点的工作流自动化工具,可以实现当 A 条件发生,触发 B 服务这样的自动工作流程. 什么是 n8n ? n8n 是免 ...

  5. 微服务实现工作流自动化

    您的公司可能希望采用微服务架构并应用工作流自动化.我在这篇博客文章中没有深入探讨一些注意点: 您会遇到以下问题: 范围和边界("您希望自动化什么工作流程以及如何将其映射到您的环境中的多个微服 ...

  6. 工作流自动化助您以实用和创新的方式应对信息管理挑战

    办公自动化最佳实践 消除信息孤岛,让员工轻松获得推动流程和完成项目所需的知识是任何办公自动化计划的关键目标.使用正确的工具,您的组织可以释放信息资产的价值,促进员工协作,消除流程中复杂.破碎的变通办法 ...

  7. RPA之Chrome插件(Automa)Web 工作流自动化

    Automa 是一个用于 Chrome 浏览器自动化的插件,从自动填写表格.执行重复性任务.截屏.抓取网站数据等等,完全可以根据你自己的需求来决定如何使用. 突然知道了这个小玩意儿,还挺不错的,就玩一 ...

  8. 替代glup和grunt,使用npm自动化构建项目

    本篇文章是对https://css-tricks.com/why-npm-scripts/该文的转载,但是发现其中一些错误,以及原文评论中的一些修改意见,故对文章内容进行修改和补充.我个人来说,还是推 ...

  9. android新架构模式_Android MVIReact架构模式

    android新架构模式 If you are already aware of basic principles of architecture patterns and MVVM and MVI ...

最新文章

  1. 强化学习gym库中的Pendulum-v1/CartPole-v1游戏介绍
  2. 开发留言本,学习笔记
  3. python代码查询_python 查询代码量
  4. 知识点整理-mysql怎么查看优化器优化后的sql
  5. iView UI常用组件DatePicker清空技巧
  6. 优秀自我简介200字_自我简介200字左右7篇
  7. 无锁队列详细分解 — 顶层设计
  8. Linux下udev详细介绍
  9. em gmm matlab,EM方法解高斯混合模型(GMM)Matlab实现
  10. 计算机随机数是如何生成的?(平分取中法、线性同余法)
  11. 直播美颜滤镜软件加持下的网络直播
  12. 自然语言处理实战:新闻文本分类(附代码)
  13. android service layoutinflater,Android LayoutInflater.from().inflate()源码解析
  14. [PHP]关于GearmanClient的诡异事件
  15. 【微信小程序入门到精通】— AppID和个性配置你学会了么?
  16. xUnit安装及注意事项
  17. win8.1装VHD的XP
  18. Tomcat服务器安装、配置教程
  19. 单片机断电记忆方法C语言,怎样使单片机程序断电保留上次的数据?
  20. 幼儿园小朋友们的难题

热门文章

  1. AD19的IPC封装向导使用
  2. iPhone手机查找朋友怎么用?添加对方号码,瞬间变成追踪器
  3. 简单使用AspectJ
  4. 颅骨管理平台_程序总结
  5. UFI模式下GPT分区安装win8
  6. java获取google 的简单天气预报
  7. 简单5招教你拍摄雪景个人写真?
  8. Swift 头像上传(2)http://blog.csdn.net/wei_chong_chong/article/details/52611110
  9. [Samuel Ko]——我的2020年回顾
  10. ggplot2-分面(facet) 一页多图