大前端基础【3-1笔记】Gulp自动化构建

文章内容输出来源:拉勾教育大前端就业急训营2期;

1、Gulp与npm scripts

  • 两者都能实现自动化构建
  • Gulp语法简单,语法就是JavaScript语法。npm script接近shell脚本
  • Gulp生态完善,构建效率高

2、Gulp基本使用

官网:https://gulpjs.com/

1.安裝
npm install gulp-cli -g
npm install gulp -D
2、创建gulpfile.js(项目根目录)
// 创建gulp函数
const task1 = (cb) => {
  console.log("task1 is running");
  cb();
}

const task2 = (cb) => {
  console.log("task2 is running");
  cb();
}
//导出
module.exports = {
  task1,  // gulp task1
  default: task2  //gulp || gulp default,默认执行task2
};

旧版声明方式

//旧版声明语法,不需要导出(导出会报错),直接 gulp task3
const gulp = require("gulp");

gulp.task("task3", (cb) => {
  console.log("task3 is running");
  cb();
})

3、Gulp组合任务

并行、串行

创建task

const gulp = require("gulp")

const task1 = (cb) => {
  setTimeout(()=>{
    console.log("task1 is running")
    cb();
  }, 1000)
}

const task2 = (cb) => {
  setTimeout(()=>{
    console.log("task2 is running")
    cb();
  }, 1000)
}

const task3 = (cb) => {
  setTimeout(()=>{
    console.log("task3 is running")
    cb();
  }, 1000)
}
1、并行

场景:构建js与css互不影响,可以同时构建(gulp.paralle(t1,t2,t3))

//并行
module.exports.p = gulp.parallel(task1, task2, task3);
2、串行

场景举例:先把less转成css,再将css转化为(gulp.serise(t1,t2,t3))

//串行
module.exports.s = gulp.series(task1, task2, task3);

4、Gulp文件操作

Gulp是基于流的构建任务

  • 输入------> 加工------->输出
  • 读取流------>转换流------> 写入流
  • gulp.src()---------->pipe()--------->gulp.dist()
const gulp = require("gulp")

//解构引入
const {src, dest} = require("gulp")

//声明gulp任务,注意:流就是异步操作,所以不需要写回调函数了
const style = () => {
  // return gulp.src("src/styles/main.less").pipe(gulp.dest("dist"));
    
    
  //src指的是要参考src下的文件目录
  // return gulp.src("src/styles/main.less", {base: 'src'}).pipe(gulp.dest("dist"));
    
  //解构以后
  return src("src/styles/main.less", {base: 'src'}).pipe(dest("dist"));
}

// 导出
module.exports = {
  style
}

5、构建样式文件

1、转换less,

npm install gulp-less,使用pipe进行匹配https://www.npmjs.com/package/gulp-less

const {src, dest}  = require("gulp")
const less = require('gulp-less');


const style = () => {
  return src("src/styles/main.less", {base: 'src'}).pipe(less()).pipe(dest("dist"))
}

module.exports = {
  style
}
2、压缩文件,

npm install gulp-clean-css --save-dev

const style = () => {
  return src("src/styles/main.less", {base: 'src'})
  .pipe(less())
  .pipe(cleanCSS())
  .pipe(dest("dist"))
}
3、重命名

npm install gulp-rename --save-dev

const style = () => {
  return src("src/styles/main.less", {base: 'src'})
  .pipe(less())
  .pipe(cleanCSS())
  .pipe(rename({
    "extname": ".min.css"
  }))
  .pipe(dest("dist"))
}
4、autoPrefixed
CSS Hack
1、cssHack是什么?

针对不同的浏览器写相应的css的代码,这个过程叫做:CSS Hack;

2、目的:

Css Hack的目的就是使你的CSS代码兼容不同的浏览器

css代码存在兼容性问题,同一段css代码,在不同浏览器上呈现的效果不同。

3、出现的原因

出现这个问题的根本原因就是各个浏览器的渲染引擎不一样,不同的渲染引擎对同一段css代码的解释可能不一样。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PxTbDRCT-1616601016259)(C:\Users\ROG\AppData\Roaming\Typora\typora-user-images\image-20210324151529119.png)]

autoprefixed

插件自动添加前缀,实现各个浏览器都兼容的写法。并不是所有的属性都添加前缀,会根据caniuse.com中的数据来决定哪些属性需要添加前缀

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RSjNj348-1616601016262)(C:\Users\ROG\AppData\Roaming\Typora\typora-user-images\image-20210324154456164.png)]

安装autoprefixed:

npm i gulp-autoprefixer -D

gulp.file编写

const {src, dest}  = require("gulp")
const less = require('gulp-less');
const cleanCSS  = require("gulp-clean-css")
const rename = require("gulp-rename")
const prefixer = require("gulp-autoprefixer")

const style = () => {
  return src("src/styles/main.less", {base: 'src'})
  .pipe(less())
  .pipe(prefixer()) //使用prefixer
  // .pipe(cleanCSS())
  // .pipe(rename({
  //   "extname": ".min.css"
  // }))
  .pipe(dest("dist"))
}

module.exports = {
  style
}

less文件

@color: red;

body{
  background-color: @color;
  user-select: none; /*存在兼容性問題*/
}

执行gulp style,得到dist文件夹下边的文件如下:

body {
  background-color: red;
  
  /*
  * 兼容性问题
  */
  -webkit-user-select: none; /*针对谷歌和safari*/
     -moz-user-select: none; /*针对火狐*/
      -ms-user-select: none; /*针对ie浏览器*/
          user-select: none;
}

6、构建脚本文件

1、es6语法转化

安装gulp-babel:https://www.npmjs.com/package/gulp-babel

确定自己的babel版本,执行不同的命令(babel -- version)查看自己的babel版本

# Babel 7
$ npm install --save-dev gulp-babel @babel/core @babel/preset-env

# Babel 6
$ npm install --save-dev gulp-babel@7 babel-core babel-preset-env

编写gulpfile.js

const babel = require('gulp-babel');

// 声明脚本构建任务
const script = () => {
  return src("src/js/main.js", {base: 'src'})
  .pipe(babel({
    // presets: ['@babel/env'] // babel7的写法
    presets: ['babel-preset-env']  //babel6的写法
  })) 
  .pipe(dest('dist')) 
} 


module.exports = {
  script
}

执行gulp script

2、压缩js代码
npm i gulp-uglify -D

编写gulp.file

const uglify = require("gulp-uglify")

// 声明脚本构建任务
const script = () => {
  return src("src/js/main.js", {base: 'src'})
  .pipe(uglify())
  // .pipe(babel({
  //   // presets: ['@babel/env'] // babel7的写法
  //   presets: ['babel-preset-env']  //babel6的写法
  // })) 
  .pipe(dest('dist')) 
} 

执行gulp script

3、重命名
npm install gulp-rename --save-dev

编写gulp.file

const rename = require("gulp-rename")

// 声明脚本构建任务
const script = () => {
  return src("src/js/main.js", {base: 'src'})
  .pipe(uglify())
  .pipe(rename({
      "extname": ".min.js"
    })) 
  .pipe(dest('dist')) 
} 

执行gulp script

7、构建Html

1、安裝

參考:https://www.npmjs.com/package/gulp-htmlmin

npm i gulp-htmlmin -D
2、gulpfile.js
const htmlmin = require("gulp-htmlmin")
const html = () => {
  return src("src/index.html", {base: 'src'})
  .pipe(htmlmin({
     collapseWhitespace: true ,
     minifyCSS: true,
     minifyJS: true
    }))
  .pipe(dest('dist'))  
}
3、并行
const build = parallel(style, script, html)
4、导出
module.exports = {
  build
}

8、构建图片文件

默认的压缩是无损压缩,学习网址:https://www.npmjs.com/package/gulp-imagemin

1、安装
npm i gulp-imagemin -D
2、gulpfile.js
const imagemin = require("gulp-imagemin")

const image = () => {
  return src("src/img/**")
  .pipe(imagemin([
      imagemin.mozjpeg({quality: 75, progressive: true}),
  ]))
  .pipe(dest('dist'))  
}

module.exports = {
    image
}
3、执行

gulp image
注意:如果执行不成功,按照附录操作即可。

9、文件清除

1、安装
npm i del -D
2、gulp.file
const del = require("del")

const clean = () => {
  return del(["dist"]);
}

module.exports = {
    clean
}
3、执行

gulp clean

10、gulp服务器

官网:https://browsersync.io/

1、安装
 npm i browser-sync -D
2、gulpfile.js
const browserSync = require("browser-sync")
const bs = browserSync.create()

const serve = () => {
  bs.init({
    server: {
     
      baseDir: './dist'  //指定服务启动的目录
    }
  })
}

module.exports = {
   serve
}
3、執行

gulp serve

11、安装bootstrap

安装

npm i jquery bootstrap@3.4.1 -S

html配置

<script src="/node_modules/jquery/dist/jquery.min.js"></script>
<script src="/node_modules/bootstrap/dist/js/bootstrap.js"></script>

gulpfile.js 配置:

const serve = () => {
  bs.init({
    notify: false,  //禁用浏览器右上角的 browserSync
    server: {
      baseDir: './dist',  //指定服务启动的目录
      routes:{
        "/node_modules": 'node_modules'  //注意:一定要配置路由
      }
    },
  })
}

12、热部署

配置gulpfile.js,执行任务监视,然后重启服务即可

const serve = () => {
  // watch 被监视的文件,执行对应的任务
  watch('src/index.html', html)
  watch('src/styles/*.less', style)
  watch('src/js/*.js', script)
  watch('src/img/**', image)
  
  bs.init({
    notify: false,  //禁用浏览器右上角的 browserSync
    files: 'dist/**',  // 监视dist下文件的变化
    server: {
      baseDir: './dist',  //指定服务启动的目录
      routes:{
        "/node_modules": 'node_modules' 
      }
    },
  })
}

如果图片构建不成功,见此处

附录

1. Win10 配置 hosts

  1. 通过vscode 打开 hosts 文件

    # hosts 文件的路径
    C:\Windows\System32\Drivers\etc
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lAcQGDP1-1616601190843)(C:\Users\changtaoliu\AppData\Roaming\Typora\typora-user-images\image-20201006182128887.png)]

  2. 添加 Guthub 相关的内容

    将下面的内容复制,然后追加到 hosts 文件的尾部

    # GitHub Start (chinaz.com) =================================================
    13.229.188.59 github.com
    54.169.195.247 api.github.com
    140.82.113.25 live.github.com
    8.7.198.45 gist.github.com
    
    # 185.199.108.154 github.githubassets.com
    # 185.199.109.154 github.githubassets.com
    185.199.110.154 github.githubassets.com
    # 185.199.111.154 github.githubassets.com
    
    34.196.247.240 collector.githubapp.com
    # 52.7.232.208 collector.githubapp.com
    52.216.92.163 github-cloud.s3.amazonaws.com
    
    199.232.96.133 raw.githubusercontent.com
    151.101.108.133 user-images.githubusercontent.com
    
    151.101.108.133 avatars.githubusercontent.com
    151.101.108.133 avatars0.githubusercontent.com
    151.101.108.133 avatars1.githubusercontent.com
    151.101.108.133 avatars2.githubusercontent.com
    151.101.108.133 avatars3.githubusercontent.com
    151.101.108.133 avatars4.githubusercontent.com
    151.101.108.133 avatars5.githubusercontent.com
    151.101.108.133 avatars6.githubusercontent.com
    151.101.108.133 avatars7.githubusercontent.com
    151.101.108.133 avatars8.githubusercontent.com
    151.101.108.133 avatars9.githubusercontent.com
    151.101.108.133 avatars10.githubusercontent.com
    151.101.108.133 avatars11.githubusercontent.com
    151.101.108.133 avatars12.githubusercontent.com
    151.101.108.133 avatars13.githubusercontent.com
    151.101.108.133 avatars14.githubusercontent.com
    151.101.108.133 avatars15.githubusercontent.com
    151.101.108.133 avatars16.githubusercontent.com
    151.101.108.133 avatars17.githubusercontent.com
    151.101.108.133 avatars18.githubusercontent.com
    151.101.108.133 avatars19.githubusercontent.com
    151.101.108.133 avatars20.githubusercontent.com
    # GitHub End ===================================================================
    
    
  3. 保存文件

    ctrl+s 保存,此时如果报:没有权限,点击以管理员身份重试

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f73022T8-1616601190845)(C:\Users\changtaoliu\AppData\Roaming\Typora\typora-user-images\image-20201006182306289.png)]

2. Mac 配置 hosts

  1. 打开终端

  2. 输入 sudo vi /etc/hosts

  3. 输入密码

  4. 进入文件 hosts,然后按 “i”,进入编辑模式

  5. 把你的内容添加到最后

    # GitHub Start (chinaz.com) =================================================
    13.229.188.59 github.com
    54.169.195.247 api.github.com
    140.82.113.25 live.github.com
    8.7.198.45 gist.github.com
    
    # 185.199.108.154 github.githubassets.com
    # 185.199.109.154 github.githubassets.com
    185.199.110.154 github.githubassets.com
    # 185.199.111.154 github.githubassets.com
    
    34.196.247.240 collector.githubapp.com
    # 52.7.232.208 collector.githubapp.com
    52.216.92.163 github-cloud.s3.amazonaws.com
    
    151.101.108.133 raw.githubusercontent.com
    151.101.108.133 user-images.githubusercontent.com
    
    151.101.108.133 avatars.githubusercontent.com
    151.101.108.133 avatars0.githubusercontent.com
    151.101.108.133 avatars1.githubusercontent.com
    151.101.108.133 avatars2.githubusercontent.com
    151.101.108.133 avatars3.githubusercontent.com
    151.101.108.133 avatars4.githubusercontent.com
    151.101.108.133 avatars5.githubusercontent.com
    151.101.108.133 avatars6.githubusercontent.com
    151.101.108.133 avatars7.githubusercontent.com
    151.101.108.133 avatars8.githubusercontent.com
    151.101.108.133 avatars9.githubusercontent.com
    151.101.108.133 avatars10.githubusercontent.com
    151.101.108.133 avatars11.githubusercontent.com
    151.101.108.133 avatars12.githubusercontent.com
    151.101.108.133 avatars13.githubusercontent.com
    151.101.108.133 avatars14.githubusercontent.com
    151.101.108.133 avatars15.githubusercontent.com
    151.101.108.133 avatars16.githubusercontent.com
    151.101.108.133 avatars17.githubusercontent.com
    151.101.108.133 avatars18.githubusercontent.com
    151.101.108.133 avatars19.githubusercontent.com
    151.101.108.133 avatars20.githubusercontent.com
    # GitHub End ===================================================================
    
    
  6. control+c 退出编辑模式

  7. 输入 :wq,保存退出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值