gulp的作用

  1. 删除文件中冗余的内容,压缩文件,减小文件体积
  2. 实际项目中运行的都是压缩完成以后的文件
  3. 减小加载响应时间

gulp打包压缩对象

  1. html,css,js,sass,webserver
  2. 音频,图片,插件等正常情况下都是打包完成的,直接移动到dist文件中就可以
  3. 服务器食欲gulp一起绑定执行的,执行的是打包压缩好的程序文件

gulp执行过程

  所有执行步骤必须严格遵守,尤其是语法规范必须严格执行

    1、下载全局gulp

      npm i -g gulp

    2、创建项目文件

      源文件src:    

        pages    存储html文件
        css      存储css文件
        sass      存储sass文件
        images     存储图片
        js       存储js文件
        plug     存储插件

      压缩文件 dist:     

        将压缩好的文件存放在dist中
        文件名称与原文件名称保持一致
        实际项目中为了保持文件名称路径一致,不添加多余的文件名后缀min等

    3、文件初始化 

      整个项目第一次执行
        npm init -y
      实际项目中,或者下载git中的项目
        下载 package.json 文件,到项目文件夹中
        package.json 中 存储了所有依赖包的信息 以及 依赖包的相关设定
        在项目路径下,执行 npm install 会自动安装依赖包

    4、如果是第一次执行项目,需要逐一安装依赖包

      如果是已经有完整的 package.json
      将 package.json 复制拷贝到指定的文件夹中,执行 npm install 会自动安装记录的依赖包      

      安装依赖包  局部/项目依赖包
        npm i gulp gulp          依赖包
        npm i gulp-cssmin          css压缩依赖包
        npm i gulp-autoprefixer       css添加前缀依赖包
        npm i gulp-uglify            ES5语法压缩依赖包
        npm i gulp-babel           其他语法转化ES5语法规范
        npm i @babel/core          与 gulp-babel 配合的依赖包
        npm i @babel/preset-env
        npm i htmlmin              html压缩依赖包
        npm i webserver           服务器依赖包
        npm i del                 删除文件依赖包

        npm i sass              sass文件依赖包

创建 gulpfile.js 文件,定义gulp打包压缩程序规范

  1、加载所有依赖包

    @babel/core 与 @babel/preset-env 是与gulp-babel配合使用的只需下载,不需要加载。

  2、制定打包规范

  a 、css 打包规范

const cssHandler = function(){
return gulp.src('./src/css/*.css')
.pipe( autoprefixer() )
.pipe( cssmin() )
.pipe( gulp.dest( './dist/css' ) )
}

                    注意: 1 , 先添加前缀,再执行打包
                            2 , 设定 浏览器兼容版本,在 package.json中设定

  "browserslist": [
"last 2 versions",
"IOS > 7",
"FireFox > 20"
]

b 、 js打包规范

const jsHandler = function(){
     return gulp.src('./src/js/*.js')
      .pipe( babel( {presets:['@babel/env']} ) )
      .pipe( uglify() )
      .pipe( gulp.dest( './dist/js' ) )
}
                    注意:1, babel( {presets:['@babel/env']} ) 以对象的形式定义参数
                            2, 先将其他语法规范,转化为 ES5 语法规范,再执行打包压缩

c 、 html打包压缩规范

                    const htmlHandler = function(){
                        return gulp.src( './src/pages/*.html' )
                            .pipe(htmlmin({
                                removeAttributeQuotes : true ,          // 删除属性上的双引号
                                removeComments : true ,                 // 删除注释内容
                                collapseBooleanAttributes : true ,     // 删除布尔属性的属性值
                                collapseWhitespace : true ,            // 删除标签之前的空格
                                minifyCSS : true ,                       // 压缩html文件中的css程序 
                                minifyJS : true ,                          // 压缩html文件中的js程序
                                                                             // 虽然可以压缩HTML中的js和css,但是压缩执行的不完美
                                                                              // 实际项目中,不要有内部,js和css,都要写成外部文件形式
                            }))
                            .pipe( gulp.dest( './dist/pages' ) )
                    }
                    注意: 1, htmlmin() 中以对象的形式定义参数

d 、图片等不需要打包压缩的,就直接移动至dist文件夹

                    const imgHandler = function(){
                        return gulp.src('./src/images/*.*')
                            .pipe( gulp.dest('./dist/images') )
                    }

e , 设定 服务器执行规范 调用执行打包压缩好的文件

                    const webserverHandler = function(){
                        return gulp.src('./dist')      // 指定的是运行文件的目录,也就是要运行的压缩的文件,所在的文件夹
                            .pipe(webserver({
                                host:'127.0.0.1',                // 主机域名,当前就是 127.0.0.1 或者 localhost
                                port:'8080',                     // 定义监听端口
                                livereload:true,                 // 执行热启动,如果程序代码,改变,自动刷新页面,不用重启服务器,不用手动刷新页面
                                open:'./pages/index.html',   // 默认打开的网页,输入 127.0.0.1:8080 地址就会直接打开的页面
                                                                    // 默认的地址是,gulp.src()设定的文件夹位置,也就是默认是 dist 压缩文件夹所在的位置,执行的也是压缩之后的文件
                            }))
                    }
                    
                    注意: 1, gulp.src('./dist') 设定执行的打包压缩文件,存储的文件夹路径
                            2, open 设定服务器启动之后,执行的默认页面
                                    设定相对路径的起始位置,是 gulp.src() 设定的文件夹位置
                            3, livereload:true,  热启动 页面样式等更新,不用手动刷新,服务器会自动刷新

    f、制定sass的编译打包压缩规范

                const sassHandler = function(){
                    return gulp.src('./src/sass/*.scss')
                           .pipe( sass() )             // 将sass编译为css
                           .pipe( autoprefixer() )     // 之后就是执行css的打包压缩规范
                           .pipe( cssmin() )
                           .pipe( gulp.dest( './dist/css' ) )
                }

设定监听程序

                a , 设定删除规范,也就是每次执行新的打包压缩之前,先删除原始的打包内容
                    const delHandler = function(){
                        return del(['./dist']);
                    }
                b , 设定监听规范,指定监听的文件文件夹,如果出现修改,会自动重新打包压缩
                    const watchHandler = function(){
                        gulp.watch( './src/css/*.css' ,  cssHandler);
                        gulp.watch( './src/js/*.js' ,  jsHandler);
                        gulp.watch( './src/pages/*.html' ,  htmlHandler);
                        gulp.watch( './src/images/*.*' ,  imgHandler);
                    }
                    注意: 1, gulp.watch() 第一个参数是,监听的文件夹文件路径
                                gulp.watch() 第二个参数是,监听文件内容发生改变时,执行的打包规范
                            2, 必须要定义的打包规范的函数名称
                c , 设定导出默认执行程序
                    module.exports.default = gulp.series(
                        delHandler,
                        gulp.parallel( cssHandler , jsHandler , htmlHandler , imgHandler),
                        webserverHandler,
                        watchHandler,
                    )
                    注意: 1,设定 module.exports.default 之后 ,再执行gulp,只要在路径下输入 gulp 就可以了
                            2,gulp.series() 按照顺序执行设定的程序,顺序必须正确
                            gulp.parallel() 是同时执行所有设定的程序
                            顺序一定是 : 先删除之前打包压缩的文件 
                                        在重新压缩所有需要打包压缩,移动的文件
                                        开启服务器
                                        执行监听

         

gulp打包详解的更多相关文章

  1. VS2010开发程序打包详解

    VS2010开发程序打包详解 转自:http://blog.sina.com.cn/s/blog_473b385101019ufr.html 首先打开已经完成的工程,如图: 下面开始制作安装程序包. ...

  2. AssetBundle打包详解

    Unity5.x AssetBundle打包详解 在网上查看了很多资料,想详细搞清楚AssetBundle的原理.以实现符合项目需求的打包工具和加载逻辑 1. AssetBundle是什么? Asse ...

  3. Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)

    Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑配置文件(pml.xml)(我 ...

  4. python 打包详解

    基本步骤: 1. 写setup.py 2. 运行“python setup.py sdist” 3. 在当前目录下会生成文件夹“dist”,打包好的代码就在dist中,以“.tar.gz”的形式被压缩 ...

  5. UDK游戏打包详解

    转自:http://blog.sina.com.cn/s/blog_944177030100ycki.html 安装完的udk目录下有4个主要的文件夹 Binaries -这个文件夹包含游戏的exe程 ...

  6. [Android Pro] Java进阶学习:jar打包详解

    jar文件听说过吗,没有?或者陌生!好,没关系,这就是我们的第一站:打包发布. 为什么会有这个玩意呢,首先,这是jar的全称:JavaTM Archive (JAR) file,是的,就是java存档 ...

  7. gulp使用详解

    前面整理了 gulp使用入门,本节介绍相关的压缩 1.压缩js文件 步骤同基础步骤,相关可以看入门篇 npm install gulp-uglify --save-dev 引入js压缩库 gulpfi ...

  8. 使用intellJ导入非maven,gradle等非构建工程的依赖,发布工程时候的打包详解

    一.导入 1.java项目在没有导入该jar包之前,如图: 2.点击 File ->  Project Structure(快捷键 Ctrl + Alt + Shift + s),点击Proje ...

  9. web程序打包详解

       重要更新:鉴于很多小伙伴们说看不到图,我这边换了几个浏览器看了下,都看得到的,估计是网速问题,请耐心等待,另外,为了更好的方便大家学习,特此提供源码以及一个word文档,word文档就是本文内容 ...

随机推荐

  1. dart类详细讲解

    dart 是一个面向对象的语言;面向对象有 (1)继承 (2)封装 (3)多态 dart的所有东西都是对象,所有的对象都是继承与object类 一个类通常是由属性和方法组成的哈: 在dart中如果你要 ...

  2. SOHO 程序员

    SOHO 程序员:从事程序开发.维护的家居办公人员. 一.自由程序员 SOHO程序员代表一种自由.弹性而新型的工作方式.SOHO,代表一种新经济.新概念. 是一些热爱软件开发的一族. SOHO程序员 ...

  3. 2019牛客多校第二场E MAZE(线段树 + 矩阵)题解

    题意: n * m的矩阵,为0表示可以走,1不可以走.规定每走一步只能向下.向左.向右走.现给定两种操作: 一.1 x y表示翻转坐标(x,y)的0.1. 二.2 x y表示从(1,x)走到(n,y) ...

  4. Koa & WebSocket inAction

    Koa & WebSocket inAction node.js https://koajs.com/ ping / pong socket.io client send 2 as ping ...

  5. 如何用 js 实现一个 bind 函数

    如何用 js 实现一个 bind 函数 原理 实现方式 总结 refs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenc ...

  6. Flutter Hackathon 2020

    Flutter Hackathon 2020 https://flutterhackathon.com/#/ Flutter Day https://mp.weixin.qq.com/s/ux17-A ...

  7. CSS Architecture & CSS Design Patterns

    CSS Architecture & CSS Design Patterns BEM Block, Element, Modifier https://en.bem.info/methodol ...

  8. Android Studio & SDK & JDK & setting path

    Android Studio & SDK & JDK & setting path https://developer.android.com/studio/intro/upd ...

  9. XML & XPath & XQuery

    XML & XPath & XQuery full XPath demo https://www.w3.org/TR/xpath-full-text-30/ https://www.w ...

  10. Flutter Android Toast Message(flutter访问Android Toast Message)

    原文 Android Toast通知可用于向用户发送快速消息,并在几秒钟后消失. 但是当涉及Flutter时,没有直接的方式来显示这些Toast消息.因此,我们需要找到一种替代方法来实现它.在这种情况 ...