gulp4搭建环境开发编译打包

Gulp是一个工具,可以帮助您完成Web开发的几项任务。它经常用于执行前端任务,例如:

Web服务器

保存文件时自动重新加载浏览器

使用Sass或LESS等预处理器

优化CSS,JavaScript和图像等资源

这是本文的用途,可以帮你使用学习gulp的基础知识

全局安装gulp-cli

  npm install --global gulp-cli

进入自己项目根目录 创建package.json文件

  npm init

安装gulp

  npm initall --save-dev gulp
gulp -v确认版本和截图匹配

确定文件夹结构

Gulp足够灵活,可以处理任何文件夹结构。在为项目调整之前,您只需了解内部工作原理。

对于本文,我们将使用通用webapp的结构:

 - app/ 
     scss/ 
     images/  
     js/  
     index.html
     index.scss 
  dist/  
  gulpfile.js  
  node_modules/ 
  package.json
  tmp

在此结构中,我们将使用该app文件夹进行开发,dist用于包含生产站点的优化文件,.tmp用于浏览器预览开发。

编写第一个gulp任务

使用Gulp的第一步是require在gulpfile中使用它

 gulpfile.js
     const gulp=require('gulp');

require语句告诉Node查看node_modules名为的包的文件夹gulp。找到包后,我们将其内容分配给变量gulp

现在可以开始编写gulp任务了 在这里你会学到gulp src() pipe() dest()等api的作用

编译sass

src下创建index.scss

src/scss下创建home.scss以及globals.scss

home用来写页面所需的样式 globals用来导入home以及未来创建的scss,利用sass带的@import导入

 home.scss
     body{
           h1{
                  background: #ccc; 
              } 
          }
 globals.scss
         @import 'home';

index.scss导入globals

 index.scss
         @import "scss/globals"
目前src的文件结构

我们可以在一个名为gulp-sass的插件的帮助下将Sass编译为Gulp中的CSS 。

 bash
     npm install gulp-sass --save-dev

require从node_modules文件夹中获取gulp-sass,从gulp中导入 src,dest;

src创建流,从文件中读取对象,dest创建src导入的对象写入文件系统中

 gulpfile.js 
     const {src,dest}=require('gulp');
     const sass=require('gulp-sass');

编写编译sass

 gulpfile.js
 
         const scss = () =>src('src/index.scss')
                                   .pipe(sass())
                                   .pipe(dest('.tmp/'));
         exports.scss = scss;

运行gulp scss

 bash 
    gulp scss
编译成功 如图所示

编译js es6 7转es5

src/js下创建文件home.js,和page.js

 home.js 
 //随便写句es6
 let x = () => alert('成功');
     x();

需要安装gulp-babel 以及babel-preset-env

 bash
     npm install gulp-babel --save-dev
     npm install babel-preset-env --save-dev

和scss同理 require找到gulp-babel模块
这里我们了解一下*和!
js/*.js代表js下所有后辍名为.js的文件
匹配所有的js的文件后,如果有某个文件不想src取到,文件前加!

gulpfile.js
     const babel=require('gulp-babel'); 
     const js = () =>
          src(['src/js/*.js', '!src/js/page.js'])
           .pipe(babel({ 
            "presets": ['env'] 
              }))
            .pipe(dest('.tmp/js'))
      exports.js = js
 bash
     gulp js
如图所示home.js编译成功 page.js成功的没有编译

图片转移进.tmp临时文件

img文件结构

同上,只需要src和dest

 gulpfile.js
 const images = () =>
   src('src/images/*.+(png| jpg | jpeg | gif | svg)', 'src/images/*/*.+(png| jpg | jpeg | gif | svg)')
   .pipe(dest('.tmp/images')); 
 exports.images = images

终端输入gulp images

 bash 
     gulp images
如图,转移成功

html动态插入js文件

安装插件gulp-inject

 bash
     npm install gulp-inject --save-dev

负责告诉gulp js文件从何处插入

html代码如图所示

编写gulpfile.js

 gulpfile.js 
 const inject = require('gulp-inject'); 
     const html=()=> 
         src('./src/index.html') 
         .pipe(inject(src(['.tmp/js/*.js'], { read: false, }), {
             ignorePath: ['.tmp'], //去除tmp
             addRootSlash: false, //去除/
           }))
         .pipe(dest('.tmp/'))
 exports.html=html;
 bash 
     gulp html
tmp下html文件如图,成功引入

至此,tmp临时文件搭建完毕

搭建本地服务器环境

需要插件browser-sync

 bash
     npm install borwser-sync --save-dev

运行文件根目录为临时文件.tmp

 gulpfile.js 
 const browserSync = require('browser-sync').create(); 
     const watchs = () => 
       browserSync.init({
           server: { 
             baseDir: '.tmp' 
           }
         }) 
 exports.watchs = watchs
如图搭建完成

watch监听文件

gulp自带的watch监听功能,每当文件修改,运行某函数

 gulpfile.js 
 const { src, dest,watch } = require('gulp'); 
 const watchs = () => { 
         watch('src/js/*.js', js) 
         watch('src/scss/*.scss', scss) 
         watch('src/index.html', html)
         watch(['src/images/*.*','src/images/*/*.*'],images) 
         browserSync.init({ 
             server: { baseDir: '.tmp' } 
             }) 
             }
 exports.watchs = watchs
修改后刷新

f5手动刷新很麻烦,更改之前的scss,js等函数,利用browser-sync实现更改自动刷新

 gulpfile.js 
 let scss = () => 
     src('./src/index.scss') 
     .pipe(sass()) 
     .pipe(dest('./.tmp/')) 
     .pipe(browserSync.reload({
      stream: true 
     })); 
 const images = () => 
     src(['src/images/*.+(png| jpg | jpeg | gif | svg)', 'src/images/*/*.+(png| jpg | jpeg | gif | svg)']) 
     .pipe(dest('.tmp/images'));         
     .pipe(browserSync.reload({ 
      stream: true }) 
            ) 
 const html = () => 
     src('./src/index.html') 
     .pipe(inject(src(['.tmp/js/*.js'], { read: false, }),{ 
     ignorePath: ['.tmp'],        //去除tmp 
     addRootSlash: false        / /去除/ 
     })) 
     .pipe(dest('.tmp/')) 
     .pipe(browserSync.reload({ 
     stream: true 
     }))

运行之前的wathcs函数

 bash 
     gulp watchs

更改app下的文件,你会发现浏览器已经成功自动刷新了

推荐把众多函数expots成一句
series()顺序执行
parallel()并发运行

 gulpfile.js 
         const { src, dest, watch, series,parallel } = require('gulp'); 
         exports.serve = series(parallel(js, scss, images), html, watchs);
 bash 
     gulp serve

至此,本教程已经完成了一半,一个单页面项目的基本构建完成

打包压缩发布

线上项目为了提高访问速度,我们需要压缩以及合并文件
安装gulp-cssnano        gulp-imagemin           gulp-concat         gulp-uglify
 bash 
     npm install gulp-cssnano  --save-dev 
     npm install gulp-imagemin  --save-dev 
     npm install  gulp-concat   --save-dev 
     npm install  gulp-uglify --save-dev
 gulpfile.js 
 const cssnano = require('gulp-cssnano') //压缩css 
 const imagemin = require('gulp-imagemin'); //图片压缩
 const concat = require('gulp-concat') //合并js 
 const uglify = require('gulp-uglify') //压缩js
 
 const baleJs = () => 
   src('src/js/*.js') 
   .pipe(concat('index.js')) 
   .pipe(babel({
    "presets": ["env"] 
   })) 
   .pipe(uglify())//压缩js 
   .pipe(dest('dist/')) 
 const baleScss = () => 
   src('./src/index.scss') 
   .pipe(sass()) 
   .pipe(cssnano())//压缩css 
   .pipe(dest('./dist/'))
 const baleImages = () => 
   src(['src/images/*', 'src/images/*/*']) 
   .pipe(imagemin())//压缩图片 
   .pipe(dest('dist/images')) 
 const baleHtml = () => 
   src('src/index.html') 
   .pipe(inject(src(['dist/index.js']), { 
    ignorePath: ['dist'], //去除dist 
    addRootSlash: false, //去除/ 
   })) 
   .pipe(dest('dist/'))

打包之前要删除原先的dist文件 安装npm的del

 bash 
    npm install del --save-dev
 gulpfile.js 
    const del=requirt('del'); 
    const naleDelete=()=>del(['dist'])

将打包逻辑组合

 gulpfile.js 
    exports.bale = series(naleDelete, parallel(baleJs, baleScss, baleImages), baleHtml)
 bash 
    gulp bale
打包成功

源码https://github.com/heweidaren/gulp-demo/tree/master

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 安装Gulp首先需要安装Node.js,并在控制台输入$ npm install gulp -gMac端需要写成$...
    LaBaby_阅读 907评论 0 1
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,428评论 1 32
  • Sass&Gulp 一、sass介绍 (一) SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计...
    锋享前端阅读 1,489评论 0 3
  • 参照Gulp for Beginners来学习Gulp基本内容。以下为学习记录笔记。 安装Gulp 首先需要安装N...
    JenniferYe阅读 2,522评论 1 17
  • 原文标题:Gulp for Beginners作者: Zell Liew翻译:治电小白菜原文地址:https://...
    ZZES_ZCDC阅读 1,570评论 6 18