前端---基于gulp的打包与热更新

本文介绍如何利用Gulp这一基于Node流的构建工具,为一个非浏览器环境的桌面应用项目实现自动化构建流程,包括热更新、文件压缩、合并及资源路径调整,适用于前后端不分离的小型项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

      前几天公司需要重构一个古老版本的项目,其实也不古老,去年6月份开发的一个桌面应用项目,主要是为了做兼容硬件设备,并不是在平时用的浏览器(类似于汽车里面的导航屏幕类的设备)。曾使用过Vue写过一个版本,但是硬件不支持Vue,所以使用了JQuery1跟Bootstrap以及Gulp来进行热更新跟打包。


应用场景

       gulp是一种基于node流的一款简单且快速的构建工具,上次跟同事聊前端的快速迭代,他说前端是为了更新而更新(做了一些没有必要的更新)。其实一些老的方法对于某些项目也是比较方便的,虽然现在主要流行的webpack,当处理简单的html,css,js等前后端不分离的项目,我个人觉得gulp还是不错的。

gulp的安装

全局安装,在项目里面在进行一次安装3.9.0(4.0.0会报错,好像指令变了)

npm i -g gulp
npm init
npm i -D gulp@3.9.0复制代码

gulp的使用

假如咱们的项目结构是这样的,新建一个gulpfile.js 的文件,作为项目构建的入口


   目标结构是这样的

  1. 将css文件下的所有css文件打包成index.min.css
  2. 将less文件下的所有less文件打包成main.min.css
  3. 将extend文件下的所有第三方引入的css更换路劲
  4. 将js文件下的所有js文件打包成main.min.js

那么如何使用gulp做呢?

   这是pageage.json 下载的gulp插件(有很多插件,我只是举个荔枝)

 "devDependencies": {   
     "gulp": "^3.9.0",
     "gulp-concat": "^2.6.1",   
     "gulp-connect": "^5.7.0",
     "gulp-htmlmin": "^5.0.1",  
     "gulp-imagemin": "^5.0.3",  
     "gulp-less": "^4.0.1",  
     "gulp-minify-css": "^1.2.4", 
     "gulp-uglify": "^3.0.2" 
 }复制代码

在gulpfile里面我们去引用他们

    var gulp =require("gulp");
    var connect = require('gulp-connect');// 启动服务
    var concat=require('gulp-concat');   //合并文件
    var less = require('gulp-less');     // 转less
    var jsuglify = require('gulp-uglify');// 压缩js
    var cssminify = require('gulp-minify-css');//压缩css
    var imageMin = require('gulp-imagemin'); // 压缩img
    var htmlmin = require('gulp-htmlmin');//压缩html复制代码

开始构建

    gulp 的官方api

    gulp.task("任务名称",function(){          })
    gulp.src('路劲') // 可读流
    .pipe(gulp.dest('目标路劲') ) //管子  --->  可写流
复制代码
  •  先启动一个端口,以便进行热更新预览

//   服务,端口    
gulp.task("server",function(){
        connect.server({ 
           root:"dist",// 路径 
           livereload:true,
            port:8080 
       })  
  })复制代码
  • 热更新 监听src下面任何文件的改动

//  热更新
gulp.task("reload",function(){
   gulp.src("./src/**/*.*") 
   .pipe(connect.reload());
})复制代码

  • dev 模式 跟build模式
  • 监听src文件改动执行build任务更新dist 文件,在执行reload重置浏览器进行热更新

 gulp.task("watch",function(){ 
   gulp.watch("./src/**/*.*", ["build","reload"]);//监听src下所有文件
})
gulp.task("dev",["server",'watch'],function(){ // function可以不传 
   console.log("dev")
}) 复制代码

  • 打包生成dist文件

gulp.task("build",['html','css','extendcss','less','js','image'])
 // 依次执行后面 [] 的任务进行打包复制代码

在这个build的任务中,我们执行了'html','css','extendcss','less','js','image'等任务

建立任务

//   css
gulp.task("css",function(){
    gulp.src("./src/css/*.css")  //  任意css文件
    .pipe(concat('main.min.css')) // 合并文件成  main.min.css 
    .pipe(cssminify())   // 压缩css    
    .pipe(gulp.dest('dist/css'))   //输出到dist/css文件夹下})
//   extendcss  依赖的第三方css 不做处理 只改变路劲
gulp.task("extendcss",function(){
    gulp.src("./src/extend/*.css")
    .pipe(gulp.dest('dist/css'))
   })
//   less
gulp.task("less",function(){
    gulp.src("./src/less/*.less")
    .pipe(less())  // 转less
    .pipe(concat('index.min.css'))
    .pipe(cssminify())
    .pipe(gulp.dest('dist/css'))
   })
// js
gulp.task('js', function() {  
  
gulp.src('./src/js/*.js')     // 1. 找到文件    
      .pipe(jsuglify({ mangle: false }))   // 2. 压缩文件       .pipe(concat('main.min.js')) // 3. 另存压缩后的文件 
      .pipe(gulp.dest('dist/js'))})
// image
gulp.task('image',function(){
    gulp.src('src/img/*.*')
        .pipe(imageMin({
            optimizationLevel: 5, //类型:Number  默认:3  取值范围:0-7(优化等级) 
            progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片    
            interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染  
            multipass: true //类型:Boolean 默认:false 多次优化svg直到完全优化  
      }))      
  .pipe(gulp.dest('dist/img'))})
//  html
gulp.task("html",function(){
     var options = {
        removeComments: true,//清除HTML注释 
        collapseWhitespace: true,//压缩HTML
        collapseBooleanAttributes: false,//省略布尔属性的值 <input checked="true"/> ==> <input />    
        removeEmptyAttributes: false,//删除所有空格作属性值 <input id="" /> ==> <input /> 
        removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"  
        removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css" 
        minifyJS: true,//压缩页面JS
        minifyCSS: true//压缩页面CSS    }; 
      gulp.src("./src/*.html")
     .pipe(htmlmin(options)) 
     .pipe(gulp.dest('dist'))
  })复制代码

运行

 我们执行

gulp dev 复制代码

       就可以在浏览器上输了localhost:8080 预览项目了,并且但我们src下的文件改动之后无需刷新页面自动更新。

淡然觉得gulp命令看的不爽的话可以修改json的指令

npm run build npm run dev 就行了

 "scripts": {   
    "dev": "gulp dev", 
    "build": "gulp build",
    "test": "echo \"Error: no test specified\" && exit 1" 
 },复制代码

写在后面

      其实像这种类似的结构的项目就很简单,开发周期短,不需要webpack那种牛逼的构建工具,每个项目都有适合自己的那一套,就像现在的前端项目,无论你怎么皮,我就是vue,react一把梭,啊哈哈哈,vue也好,jq也罢,适合项目的才是最好的,老话说的好,不试试你怎么知道合不合适?(淡然,公司是不会给你时间去试试的)

       啊哈哈,第一次写,溜了溜了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值