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. SSH 密钥认证

    目录 SSH协议概述 SSH 和 Telnet 的区别 SSH 相关命令 SSH 验证方式 基于密钥的安全认证 SSH 优化 expect 脚本免交互登录 sshpass 免交互登录 SSH协议概述 ...

  2. 1.nginx安装和基本配置

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-07-10 20:56:10 星期三 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...

  3. appveyor build failed --

    在 https://www.cnblogs.com/lqerio/p/11117498.html 使用了appveyor 进行 hexo 博客的版本控制持续集成. 今天push 到 github的 r ...

  4. codeforces 6E (非原创)

    E. Exposition time limit per test 1.5 seconds memory limit per test 64 megabytes input standard inpu ...

  5. Apple 产品反人类的设计 All In One

    Apple 产品反人类的设计 All In One 用户体验 shit rank WTF rank iPhone 更换铃声 WTF, 这么简单的一个功能搞得太复杂了 使用要下载 1.6 G的库乐队 A ...

  6. 经济学,金融学:资产证券化 ABS

    经济学,金融学:资产证券化 ABS ABS 资产支持证券 蚂蚁金服如何把30亿变成3000亿?资产证券化 前几天,花呗借呗的东家蚂蚁集团在上市前夕被监管部门叫停,因为这则新闻广大网民都听说了一个概念: ...

  7. 密码 & 安全

    密码 & 安全 拖库/脱库 如何在数据库中存储密码更安全? https://time.geekbang.org/dailylesson/detail/100044031 拖库和撞库 https ...

  8. 「NGK每日快讯」2021.2.7日NGK公链第96期官方快讯!

  9. 1. VUE介绍

    今天开始系统学习vue前端框架. 我是有前端基础的, 刚工作那会, 哪里分那么清楚啊, 前后端我都得做, 所以, css, js, jquery, bootstrap都会点, 还系统学过ext, 哈哈 ...

  10. jQuery编写组件的几种方式

    原文链接:https://w.cnblogs.com/xiao-xi/p/8572471.html 三种方式: 1.通过$.extend()来扩展jQuery 2.通过$.fn 向jQuery添加新的 ...