美文网首页
自动化构建工具Gulp

自动化构建工具Gulp

作者: amanohina | 来源:发表于2021-01-20 18:40 被阅读0次

npm scripts和Gulp

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

步骤

  • 全局安装gulp客户端
npm install -g gulp-cli
  • 初始化项目
npm init --yes
  • 安装gulp包
npm install gulp -D
  • 新建gulpfile文件(gulpfile.js)
  • 创建gulp任务
  • 执行gulp任务
gulp<task-name>
const gulp = require('gulp')
// 创建gulp任务
const task1 = (cd)=>{
    console.log("task1 is running")

    cd()
}

const task2 = (cd)=>{
    console.log("task2 is running")

    cd()
}
// 旧的使用方法
gulp.task("task3",(cd)=>{
    console.log("task3 is running")

    cd()
})
// 导出任务
module.exports = {
    task1,
    default: task2 //默认任务
}

Gulp组合任务

parallel并行,series串行
例子
const { task } = require("gulp");
const gulp = require("gulp")

const task1 = (cd)=>{
    setTimeout(() =>{
        console.log("task1 is running")

        cd();
    },1000)
}
const task2 = (cd)=>{
    setTimeout(() =>{
        console.log("task2 is running")
        
        cd();
    },1000)
}
const task3 = (cd)=>{
    setTimeout(() =>{
        console.log("task3 is running")
        
        cd();
    },1000)
}
// 任务的并行执行
exports.p = gulp.parallel(task1,task2,task3);

// 任务的串行执行
exports.s = gulp.series(task1,task2,task3)

Gulp文件操作

  • Gulp是基于的构建系统

// const gulp = require("gulp")
// 通过解构的方式引入函数
const { src,dest } = require("gulp")

// 声明任务
const style = ()=>{
    // 流 就是异步操作
    return src("src/style/main.less",{ base: "src" }).pipe(dest("dist"))
}

module.exports = {
    style
}

创建样式文件


gulp官网

www.gulpjs.com

处理less

https://www.npmjs.com/package/gulp-less

处理压缩

https://www.npmjs.com/package/gulp-clean-css

重命名

https://www.npmjs.com/package/gulp-rename

const { src, dest } = require('gulp')
const less = require('gulp-less')
const cleancss = require('gulp-clean-css')
const rename = require('gulp-rename')
const style = () =>{
    return src('src/style/main.less',{ base : 'src'})
    .pipe(less())
    .pipe(cleancss())
    .pipe(rename({"extname" : ".min.css"}))
    .pipe(dest('dist'))
}

module.exports = {
    style
}

autoprefixer(保证CSS的兼容性)

CSS hack

  • CSS代码存在兼容性问题
    • 同一段CSS代码在不同的浏览器呈现的效果可能不一样
  • 针对不同浏览器写相应的CSS代码
    • 这个过程,叫做CSS hack

CSS hack的目的就是让你的CSS代码能够兼容不同的浏览器

CSS hack - 属性前缀法

  • user-select 属性可以控制用户是否能选中文本(存在兼容性问题)



    浏览器的CSS属性前缀

autoprefixer插件


Autoprofixer使用的是caniuse.com的数据来决定哪些属性需要加前缀
npm i install gulp-autoprefixer -D
    const autoprefixer = require('gulp-autoprefixer')
    .pipe(autoprefixer())

构建脚本文件

类似样式文件构建

所需插件
// 声明脚本构建任务
const script = () => {
    return src("src/js/main.js",{ base: 'src' })
    .pipe(babel({
        presets: ['babel-preset-env']
    }))
    .pipe(uglify())
    .pipe(rename({"extname" : ".min.js"}))
    .pipe(dest("dist"))
}

构建HTML文件

// 构建页面
const html = () => {
    return src("src/index.html")
    .pipe(htmlmin({ collapseWhitespace : true,minifyCSS:true,minifyJS:true}))
    .pipe(dest('dist'))

}

具体的参数看详细文档
html,js,css压缩没有具体的顺序,使用并行组合任务一并完成

// 使用并行执行
const build = parallel(style,script,html)
module.exports = {
    style,
    script,
    html,
    build
}

构建图片文件



依然报错的话,就删除node_module文件夹使用npm install重新下载依赖
默认进行无损压缩
// 图片构建任务
const image = () =>{
    return src('src/images/**',{base: 'src'})
    .pipe(imagemin([
        // 无参数就是无损压缩
        // 有参数,有损压缩,75%,具体的需要参考文档
        imagemin.mozjpeg({quality:75,progressive:true})
    ]))
    .pipe(dest('dist'))
}

文件清除

npm i del -D

先删后加

const clean = () =>{
    return del('dist')
}
// 使用并行执行
const build = parallel(style,script,html,image)
// 串行
const dev = series(clean,build)
module.exports = {
    dev,
    build
}

服务发布


www.browsersync.io
安装依赖

npm i browser-sync -D
// 声明服务发布的任务
const serve = () =>{
    bs.init({
        // 禁用浏览器的browserSync connected提示框
        notify:false,
        server:{
            // 指定服务启动的目录
            baseDir:'./dist'
        }
    })
}

使用Bootstrap


引入bootstrap之后,要设置一些东西:

  • 在src下的index.html引入bootstrap和其依赖jQuery
  • 要在browserSync下加一个路径,映射路径,才能读取
            routes:{
                '/node_modules' : 'node_modules'
            }

Reload热更新

  • 第一:添加src监听
  • 第二:添加dist监听
const serve = () =>{
    // watch(被监视的文件,对应的任务)
    watch('src/index.html',html)
    watch('src/style/*.less',style)
    watch('src/js/*.js',script)
    watch('src/images/**',image)
    bs.init({
        // 禁用浏览器的browserSync connected提示框
        notify:false,
        files : 'dist/**', // 监视dist下的文件的变化,浏览器实时更新

        server:{
            // 指定服务启动的目录
            baseDir:'./dist',
            routes:{
                '/node_modules' : 'node_modules'
            }
        }
    })
}

相关文章

  • 相关文章记录

    1.gulp构建工具相关信息 前端自动化构建工具gulp记录Gulp.js-livereload 不用F5了,实时...

  • JavaScript学习笔记(三十六)-- GULP

    GULP gulp 是一个项目开发的 自动化打包构建工具 基于 node 环境来运行的 什么是自动化打包构建工具 ...

  • gulp和webpack的理解

    gulp和webpack都是自动化构建工具。 两者不同点: 1、gulp 是基于流的自动化构建工具, 通常以管道的...

  • gulp入门教程

    gulp是前端的自动化构建工具,gulp的出现是希望能取代grunt,成为最流行的前端自动化构建工具,它与grun...

  • 1,node.js

    自动化构建工具 gulp webpack grunt gulp--构建项目,压缩合并处理,依赖于 gulpf...

  • gulp 基本的使用

    今天说说自动化构建工具gulp的使用,gulp其实是一个非常简单的自动化构建工具,它的作用有编译代码、压缩代码、热...

  • ES6项目构建方法

    任务自动化(gulp) gulp:自动化构建工具;任务自动化,就是说,尽量不使用人工,使用工具自动操作一些任务;g...

  • gulp

    gulp解释 GULP 是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器。GULP 是 基 于 Nod...

  • 『前端工程化』gulp(gulp3 && gul

    Gulp 什么是Gulp Gulp是基于Node.js的构建工具,我们使用它来集成前端开发环境,来构建自动化工作流...

  • gulp总结

    gulp gulp 是基于stream的自动化构建工具 官网 https://www.gulpjs.com.cn/...

网友评论

      本文标题:自动化构建工具Gulp

      本文链接:https://www.haomeiwen.com/subject/owtkzktx.html