web前端-Gulp入门

news/2024/11/30 13:31:34/

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.ppmy.cn/news/1205514.html

相关文章

js:React中使用classnames实现按照条件将类名连接起来

参考文档 https://www.npmjs.com/package/classnameshttps://github.com/JedWatson/classnames 安装 npm install classnames示例 import classNames from "classnames";// 字符串合并 console.log(classNames("foo", "bar")); // foo bar//…

大语言模型的关键技术(二)

一、Transformer 语言模型存在明显的扩展效应: 更大的模型/数据规模和更多的训练计算通常会导致模型能力的提升。 1、扩展效应的原因: 模型规模:增加模型的规模,即增加模型的参数数量和层数,通常会提高模型的表示能力…

挑战100天 AI In LeetCode Day05(热题+面试经典150题)

挑战100天 AI In LeetCode Day05(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-72.1 题目2.2 题解 三、面试经典 150 题-73.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&am…

winform+access数据库增删查改报表导出demo源码

C#winformaccess数据库增删查改报表导出demo源码设备管理的一个简单程序使用access数据库增删查改导出报表功能 OleDbConnection conn new OleDbConnection("Data Source" System.Windows.Forms.Application.StartupPath "\\config\\cinfor.mdb;ProviderMicr…

合肥工业大学数据库实验报告

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…

计算机中丢失mfc140u.dll怎么解决

mfc140u.dll是一个Microsoft Visual C库文件,主要用于MFC(Microsoft Foundation Class)应用程序的开发。它包含了MFC应用程序所需的一些常用功能,如对话框、窗口、菜单等。当mfc140u.dll丢失时,可能会导致MFC应用程序无…

Windows安装svn命令

1、svn命令下载地址 https://www.visualsvn.com/downloads/; 2、安装svn命令 3、测试svn命令是否安装成功

springboot自己添加的配置文件没有绿色叶子问题

在IntelliJ IDEA中,不同文件类型通常会有不同的图标,以便更容易识别它们。如果您的自己添加的 .properties 文件和项目中自动生成的 .properties 文件显示不同的图标,这可能是因为它们被识别为不同的文件类型。 通常情况下,Intel…