web前端-Gulp入门

news2024/11/25 19:17:16

web前端-Gulp入门

  • gulp的概述
  • 使用gulp
    • 准备工作
    • gulp的常用API
    • gulp的常用插件
    • gulpfile.js的初体验
    • 打包css文件
    • 打包scss文件
    • 打包js
    • 打包html
    • 打包images
    • 创建一个默认任务
    • 创建一个删除任务
    • gulp启动服务
    • 创建一个监控任务

gulp的概述

gulp: 前端自动化打包固件工具, gulp是基于流格式的一种打包构建工具,依赖node环境进行开发, 底层封装的内容就是node里面的读写文件。

什么是流?

  • 流文件: 流
    • 一种文件传输的格式
    • 一段一段的文件传输
  • 流格式: 流
    • 从头到尾的一个过程
    • 需要从 源 开始一步一步经过加工,每一个步骤都需要依赖上一步的结果,最终给出一个完成的成品。

gulp的安装

  • 是一个JavaScript相关的工具
  • 就是可以直接使用npm 进行安装
  • 需要安装在你的电脑环境里面, 一次安装多次使用
  • 打开终端,输入指令:npm install --global gulp

gulp的版本:

  • gulp@3 : 安装成功检测版本号,gulp 3.9.1
  • gulp@4: 安装成功检测版本号, gulp cli 2.3.0
  • 检查gulp是否安装成功:gulp -v / gulp --version

gulp的卸载:

  • gulp uninstall --global gulp

使用gulp

准备工作

  • 准备一个项目, 假如的项目有如下结构:
    在这里插入图片描述
  • 准备一个gulpfile.js的文件(必须有
    • gulp进行打包的依据
    • 每一个项目需要一个gulpfile.js
    • 我们在这个文件里面进行本项目的打包配置
    • gulp在 运行的时候,会自动读取 gulpfile.js 文件里面的配置
    • 按照你在 gulpfile.js 文件里面的配置进行打包工作
    • 注意: 直接写在项目跟目录, 和src同级

我们这里可以打印下gulp, 看看gulp中含有什么?
在这里插入图片描述

gulp的常用API

  • gulp.task() : 创建一个基于流的任务
    • 语法: gulp.task(任务名称, 任务处理函数)
    • 例子:gulp.task('htmlHandler', function () { 找到html文件,进行压缩,打包,放入指定目录 })
  • gulp.src(): 找到源文件
    • 语法 : gulp.src(任务名称,任务处理函数)
    • gulp.scr('./a/b.html') : 找到一个指定的文件
    • gulp.scr('./a/*.html') : 找到指定目录下,指定后缀的文件
    • gulp.scr('./a/b/**') : 找到指定目录下的所有文件
    • gulp.scr('./a/**/*') : 找到a目录下所有子项目里面的所有文件
    • gulp.scr('./a/**/*.html') : 找到a目录下所有子目录里面的所有.html文件
  • gulp.dest(): 把一个内容放入指定目录内
    • 语法: gulp.dest(路径信息)
    • 例子:gulp.dest(./abc):把接受的内容方法abc目录下
  • gulp.watch(): 监控指定项目目录下的文件, 一旦发生变化,从新执行后面的任务
    • 语法:gulp.wtach(路径信息, 任务名称)
    • 例子:gulp.watch(./src/pages/*.html, htmlhandle):当指定目录下面的html文件发生变化,就会执行htmlhandle这个任务。
  • gulp.series(): 逐渐执行多个任务,前一个任务结束,第二个任务开始
    • 语法: gulp.series(任务1, 任务2, 任务3,…)
  • gulp.parallel(): 并行开始多个任务
    • 语法: gulp.paraller(任务1, 任务2, 任务3,…)
  • pire(): 管道函数,所有gulp的API都是基于流,接受当前流,进入下一个流过程的管道函数
    • 例子: gulp.src().pipe(压缩任务).pire(转码).pire(gulp.dest('abc'))

gulp的常用插件

gulp的各种插件就是用来执行各种各样的压缩混淆转码任务的

  • gulp-cssmin
    • 下载: npm install gulp-cssmin -D
    • 导入: const cssmin = require(‘gulp-cssmin’)
    • 导入以后得到一个处理流文件的函数
    • 直接在管道函数里面执行就好了
  • gulp-autoprefixer
    • 下载: npm install gulp-autoprefixer -D
    • 导入 :
    • 导入以后得到一个处理流文件的函数
    • 直接在管道函数里面使用,需要传递参数:{ browsers: [要兼容的浏览器] }

gulpfile.js的初体验

执行一个gulp配置好的任务, 直接在终端,切换到gulpfile.js所在的目录, 执行命令 gulp 任务名称

  • gulp3的标注写法:
const gulp = require('gulp')

//1.导入gulp-cssmin
const cssmin = require('gulp-cssmin')

// 1.创建一个打包css的任务
gulp.task('cssHandler', function () {
  // 需要捕获到该任务的结束,需要把这个流retur出去, task就会处理流
  return gulp
  .src('./src/css/*.css')
  .pipe(cssmin())
  .pipe(gulp.dest('./dist/css/'))
})

如果不加上面的return,也可以执行得到结果,但是会报如下的警告, 把流return出去就不会有警告了。
在这里插入图片描述

  • gulp4的标准写法:
// gulp4的写法
const cssHandler = function () {
    return gulp
      .src('./src/css/*.css')
      .pipe(cssmin())
      .pipe(gulp.dest('./dist/css/'))
}
module.exports.cssHandler = cssHandler

在这里插入图片描述

打包css文件

//1. 导入gulp
const gulp = require('gulp');

//导入gulp-cssmin
const cssmin = require('gulp-cssmin')

// 导入 gulp-autoprefixer
const autoprefixer = require('gulp-autoprefixer')

// 创建打包css的任务函数
const cssHandler = function () {
  return gulp
      .src('./src/css/*.css') // 找到内容
      .pipe(autoprefixer(['last 2 versions'])) // 自动添加前缀 可以配置需要兼容的属性
      .pipe(cssmin()) // 压缩
      .pipe(gulp.dest('./dist/css/')) // 放到指定目录
}
// 导出
module.exports.cssHandler = cssHandler

我们除了在autoprefixer函数中配置需要兼容的属性除外, 还可以再package.json文件中配置(推荐
在这里插入图片描述在这里插入图片描述

打包scss文件

gulp-sass : 把sass转换成css的库

  • 下载: npm i gulp-sass -D
  • gulp-sass现在不在自带默认的 sass编辑器了, 需要我们自行下载, 我们可以直接使用npm安装下相关sass编辑器,npm i -D sass 或则 npm i -D node-sass,下载完成之后再编译。

如果没有下载上述两种sass编辑器种的一种, 会报如下错误:
在这里插入图片描述

//导入gulp-cssmin
const cssmin = require('gulp-cssmin')

// 导入 gulp-autoprefixer
const autoprefixer = require('gulp-autoprefixer')

// 导入gulp-sass
const sass = require('gulp-sass')(require('node-sass'))

// 创建一个打包sass的文件
const sassHandler = function () {
  return gulp
    .src('./src/sass/*.scss')
    .pipe(sass())
    .pipe(autoprefixer())
    .pipe(cssmin())
    .pipe(gulp.dest('./dist/sass/'))
}
// 到处打包sass的函数
module.exports.sassHandler = sassHandler

打包js

  • gulp-uglify: 压缩JS文件的插件
    • 下载:npm i -D gulp-uglify
    • 导入之后得到一个可以处理流文件的函数,直接在管道函数中使用了
    • 注意:你不能写ES6的语法,一旦有了ES6的语法就会报错
  • gulp-babel: 专门进行ES6转ES5的插件
    • gulp-babel的版本:
      • gulp-banel@7:大部分使用再gulp@3 里面
      • gulp-babel@8: 大部分使用再gulp@4 里面
    • 下载:
      • gulp-babel需要依赖另外两个包,我们要一起下载
      • 另外两个包: @babel/core @babel/preset-env
    • 导入:
      • 只需要导入一个包就可以了,它会自动导入另外两个包
      • const babel = requeire('gulp-babel')
    • 导入后得到一个可以处理流文件的函数,直接在管道函数内部使用,需要传递参数
//1. 导入gulp
const gulp = require('gulp');

// 导入gulp-uglify插件
const uglify = require('gulp-uglify')

// 导入babel 插件
const babel = require('gulp-babel')

// 创建一个大包js的任务函数
const jsHandler = function () {
  return gulp
    .src('./src/js/*.js') // 找到js文件
    .pipe(babel({
      // babel@7, preset:['es2015']
      presets: ["@babel/env"]
    })) // ES6 转 ES5
    .pipe(uglify()) // 压缩js文件
    .pipe(gulp.dest('./dist/js/'))
}

// 导出JS的打包函数
module.exports.jsHandler = jsHandler

打包html

  • gump-htmlmin: 压缩html文件的插件
    • 下载:npm i -D gulp-htmlmin
    • 导入以后得到一个可以流文件的函数,直接再管道函数里面调用,需要传递参数
//1. 导入gulp
const gulp = require('gulp');

// 导入gulp-htmlmin插件
const htmlmin = require('gulp-htmlmin')

// 创建一个打包html的任务函数
const htmlHandler = function () {
  return gulp
    .src('./src/pasge/*.html')
    .pipe(htmlmin({
      // 通过你配置的参数来压缩html文件
      collapseWhitespace: true, // 表示移除空格
      removeEmptyAttributes: true, //表示移除空的属性(仅限原生属性)
      collapseBooleanAttributes: true, // 移除checked 类似的布尔值属性
      removeAttributeQuotes: true, // 移除属性上的双引号
      minifyCSS: true, // 压缩内嵌式css代码(只能基本压缩,不能自动添加前缀)
      minifyJS: true, // 压缩内嵌式js(只能基本压缩,不能进行转码)
      removeStyleLinkTypeAttributes: true, // 移除style和link标签上的type属性
      removeScriptTypeAttributes: true // 移除script标签上的type属性 
    }))
    .pipe(gulp.dest('./dist/pasge/'))
}

// 导出html的打包函数
module.exports.htmlHandler = htmlHandler

打包images

在开发环境中,我们一般不对图片做压缩处理, 直接移动到新的位置即可

//1. 导入gulp
const gulp = require('gulp');

// 创建一个打包images的任务函数
const imagesHandler = function () {
  return gulp
    .src('./src/images/**')
    .pipe(gulp.dest('./dist/images/'))
}

// 导出打包html的打包函数
module.exports.imagesHandler = imagesHandlers

创建一个默认任务

  • 配置一个默认任务
    • 默认任务的作用就是把所有的任务给我一起执行了
    • gulp.series/gulp.parallel(), 这两个方法返回一个函数,返回值可以直接当做任务函数使用,使用task的方式创建一个default任务
    • 默认任务为什么一定要叫做default, 因为你使用gulp指令的时候,应该是gulp 任务名称,当你有一个叫做default的任务的时候, 你可以直接执行指令gulp,它会自动去指定你的gulpfile.js文件中的default任务

在这里插入图片描述

创建一个删除任务

当我们修改文件之后,在次执行gulp任务的时候,是不会进行文件夹的清理的,在这种情况下可能会存在一些无用的文件,所以当我们修改文件重新打包之前,我们应该删除之前的旧的打包文件,然后再重新生成新的打包文件。

  • del: 删除文件目录, 导入之后得到一个函数,直接使用传递参数就可以了 。
    • 注意:del最新版本7.0.0不支持require导入方式支持, 可以降低版本到6.0.0
// 创建一个删除dist任务
const delHandle = function () {
  // del 直接执行就可以了, 不需要流
  // 参数以数组的形式传递你要删除的文件夹
  return del('./dist/')
}

module.exports.default = gulp.series(
  delHandle,
  gulp.parallel(cssHandler, sassHandler, jsHandler, htmlHandler,imagesHandler)
)

gulp启动服务

  • 利用gulp启动一个服务
    • gulp 是基于node环境的工具
    • node 就是可以做服务器的语言
    • gulp 可以启动一个基于node的服务器
  • gulp-webserver: 启动一个基于node书写的服务器
    • 下载: npm i -D gulp-webserver
    • 导入以后得到一个处理流文件的函数,我们在管道函数内调用就可以了,需要传递参数
// 创建一个启动服务器的任务
const webHandler = function () {
  return gulp 
    .src('./dist')
    .pipe(webserver({
      open: './pasge/index.html', // 默认打开哪一个文件(从dist目录以后的目录开始)
       livereload: true, // 当文件修改的时候自动刷新页面
      proxies:[ // 配置你的所有代理, 每一个代理都是一个对象数据类型
      // 注意: 如果没有代理,不要写空对象
      // 如果你想使用代理,必须要是在gulp-webserver启动的服务器上
        {
          source: '', // 代理标识符
          target: '', // 代理目标地址
        }
      ]
    }))
}

module.exports.default = gulp.series(
  delHandle,
  gulp.parallel(cssHandler, sassHandler, jsHandler, htmlHandler,imagesHandler),
  webHandler
)

创建一个监控任务

我们每次修改代码之后,都需要从新启动, 这样造成开发非常的不方便。 所以我们需要创建一个监控任务
在这里插入图片描述
上述例子是当你修改css文件时,watch监控到css文件的改变, 会执行cssHandler函数, 然后更新页面。 根据需要可以添加其他的监听

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp在不需要后端数据的情况下 怎么记录用户进一次记录一次

目录 前言&#xff1a; html部分 js部分 完整代码 前言&#xff1a; 一时兴起&#xff0c;不喜勿喷&#xff0c;今天听到了这个问题想到了一个方法&#xff0c;解决方式如下。 html部分 他用于显示访问次数&#xff08;visitCount变量的值&#xff09;。 <template&…

Day24力扣打卡

打卡记录 寻找峰值&#xff08;二分法&#xff09; class Solution { public:int findPeakElement(vector<int> &nums) {int left -1, right nums.size() - 1; // 开区间 (-1, n-1)while (left 1 < right) { // 开区间不为空int mid left (right - left) / …

【Vue】vant2使用van-tree-select实现【全选、反选、搜索】,自定义组件,拿去即用。2.0版本保姆级教程

系列文章目录 这是原篇教程&#xff0c;本篇为升级版&#xff0c;旧版已废弃。对你们不友好。 【Vue】vue2移动端 &#xff0c;vant2使用van-tree-select分类选择实现【全选】和【取消全选】、【搜索过滤当前children】&#xff0c;只影响当前显示children&#xff0c;并且去重…

clickhouse.22.8.3.13单机版安装

介绍 1、clickhouse是一款优秀的开源MPP数据库。 安装ClickHouse的步骤如下&#xff1a; 2、下载clickhouse https://repo.clickhouse.tech/tgz/ 但是这个下载太慢了&#xff0c;找个国内的镜像 https://mirrors.aliyun.com/clickhouse/ 我们采用阿里云的镜像地址。 cli…

An error occurred while filtering resources

Description Path Resource Location Type An error occurred while filtering resources PMS line 1 Maven Java EE Configuration Problem不知道怎么跑出来了&#xff0c;update project 还是不行 但是不影响运行&#xff0c;奇…

记录两个Excel导出出现的问题

问题一&#xff1a;导出数据时&#xff0c;这行代码返回null&#xff0c;导致导出excel失败&#xff1b; Workbook workbook ExcelExportUtil.exportExcel(params, map);解决&#xff1a;排查出来&#xff0c;是因为版本问题&#xff0c;autopoi版本是1.2.1&#xff1b; 升级…

MCU系统的调试技巧

MCU系统的调试技巧对于确保系统稳定性和性能至关重要。无论是在嵌入式系统开发的初期阶段还是在产品维护和优化的过程中&#xff0c;有效的调试技巧可以帮助开发人员快速发现和解决问题&#xff0c;本文将讨论一些MCU系统调试的技巧。 首先&#xff0c;使用调试工具是非常重要…

小程序day05

使用npm包 Vant Weapp 类似于前端boostrap和element ui那些的样式框架。 安装过程 注意:这里建议直接去看官网的安装过程。 vant-weapp版本最好也不要指定 在项目目录里面先输入npm init -y 初始化一个包管理配置文件: package.json 使用css变量定制vant主题样式&#xff0…

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远程控制软件总结

红队专题 招募六边形战士队员[30]远控班第一期课程与远控总结 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 [30]远控班第一期课程与远控总结 一.Bug修复(1)生成路径(2)显示系统版本号二.内存泄露(1)如何检查内存泄露 #define CRTDBG_…

Modbus通讯模拟仿真环境的搭建

文章目录 一、概要二、所需工具介绍三、搭建虚拟仿真环境1.Modbus RTU虚拟仿真环境搭建1.1.虚拟串口工具&#xff08;VSPD&#xff09;使用1.2.虚拟从站工具&#xff08;ModSim32&#xff09;使用1.3.虚拟主站工具&#xff08;Modscan32&#xff09;使用1.4.更改虚拟从站工具&a…

如何处理数据集内的缺失值?

照片 奥坎耶尼贡 由Pierre Bamin在Unsplash上拍摄 一、说明 也许数据科学或机器学习问题研究中要求最高的阶段是数据预处理阶段&#xff0c;其目的是最终创建有用的数据集。如果说处理很酷的机器学习模型是阿喀琉斯的热门&#xff0c;那么数据预处理就是被诅咒的西西弗斯。…

Git的高效使用 git的基础 高级用法

Git的高效使用 git的基础 高级用法 前言 什么是Git 在日常的软件开发过程中&#xff0c;软件版本的管理都离不开使用Git&#xff0c;Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linu…

认识EPLAN软件中的各种“点”

原文是网络上的一篇文章&#xff0c;内容有很多错字&#xff0c;我重新编辑了一下发出来&#xff0c;供参考。 在 EPLAN 中&#xff0c;有很多"点"&#xff0c;不同的点的具体含义各有不同&#xff0c;只有弄清楚了不同点的含义&#xff0c;在软件应用中才会得心应手…

【爬虫】Java爬虫爬取某招聘网站招聘信息

目录 前言 一、爬虫程序的基本架构 二、如何获取目标网站的页面内容 三、解析HTML页面&#xff0c;提取所需信息 四、代理IP的使用 五、完整代码 总结 前言 随着互联网的普及&#xff0c;越来越多的人开始关注网络上的招聘信息&#xff0c;而传统的求职方式愈发显得不够…

壹基金防灾减灾宣传进社区 提升家庭安全能力

11月7日&#xff0c;瑞金市赋能济困公益协会、蓝天救援队等联合沙洲坝镇红都新城社区一起走进梦想家园小区&#xff0c;开展家庭安全计划社区活动包挑战赛活动暨壹基金安全家园项目防灾减灾宣传社区行活动。 活动中&#xff0c;志愿者针对从洪涝灾害、风灾、火灾、雪灾、地质灾…

k8s:kubectl 详解

目录 1 kubectl 2 基本信息查看 2.1 查看 master 节点状态 2.2 查看命名空间 2.3 查看default命名空间的所有资源 2.4 创建命名空间app 2.5 删除命名空间app 2.6 在命名空间kube-public 创建副本控制器&#xff08;deployment&#xff09;来启动Pod&#xff08;nginx-wl…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(二)

新增员工功能开发 1. 新增员工1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码开发1.2.1 设计DTO类1.2.2 Controller层1.2.3 Service层接口1.2.4 Service层实现类1.2.5 Mapper层 1.3 功能测试1.3.1 接口文档测试 1.4 代码完善1.4.1 问题一1.4.2 问题二1.…

从零开始的C++(十四)

继承&#xff1a; 作用&#xff1a;减少重复代码&#xff0c;简化程序。 用法&#xff1a; class b&#xff1a;public a {//...b中成员 } 在如上代码中&#xff0c;b类以public的方式继承了a类。规定a类是父类、基类&#xff0c;b类是子类、派生类。 关于继承方式&#xf…

Tcl语言:SDC约束命令create_generated_clock详解(下)

相关阅读 Tcl语言https://blog.csdn.net/weixin_45791458/category_12488978.html?spm1001.2014.3001.5482 设定生成时钟特性 前文的末尾提到&#xff0c;当使用-divide by或-multiply_by选项创建生成时钟时&#xff0c;会根据master clock的时钟周期派生出生成时钟的周期&am…

【Java 进阶篇】Java Filter 快速入门

欢迎来到这篇有关 Java Filter 的快速入门指南&#xff01;如果你是一名 Java 开发者或者正在学习 Java Web 开发&#xff0c;Filter 是一个强大的工具&#xff0c;可以帮助你管理和控制 Web 应用程序中的请求和响应。本文将向你解释 Filter 的基本概念&#xff0c;如何创建和配…