自动化构建工具Gulp

2021-01-20  本文已影响0人  amanohina

npm scripts和Gulp

步骤

npm install -g gulp-cli
npm init --yes
npm install gulp -D
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文件操作

// 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 hack的目的就是让你的CSS代码能够兼容不同的浏览器

CSS hack - 属性前缀法

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之后,要设置一些东西:

            routes:{
                '/node_modules' : 'node_modules'
            }

Reload热更新

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'
            }
        }
    })
}
上一篇 下一篇

猜你喜欢

热点阅读