Gulp的使用

Gulp是一个前端自动化构建工具,基于流的的构建系统,主要优点是速度,效率和简化

Gulp可以干什么?

开发服务器,Sass,Less或Stylus文件的预处理器,处理JavaScript的自动化脚本,代码优化工具,压缩,编译或移动文件

Gulp的官网 https://www.gulpjs.com.cn/

gulp类似的工具 : grunt webpack

gulp是基于nodejs的, gulp和所有插件都通过JavaScript编写并依托Node.js平台

1.gulp优点:
1. 易于使用
2. 构建快速
3. 插件高质
4. 易于学习
2.gulp的安装

全局安装

npm install gulp -g
npm install gulp@版本号 -g

执行gulp -v查看gulp的版本号

局部安装

在本地下载
npm install gulp --save-dev
3.gulp api

1.gulp.task(name, fn) 构建任务

name任务名 string

任务名为default :  执行 ---> gulp 

任务名为minJs : 执行 ---> gulp 任务名

2.gulp.src(globs) 读取文件

  • 通配符路径匹配
    1. “src/a.js”

指定具体文件

​ 2.“*”:匹配所有文件

例 :src/*.js (包含src下的所有的js文件)

​ 3.“**” : 匹配0个或多个子文件夹

例 : src/**/*.js(包含src的0个多个子文件夹下的js文件)

​ 4.“{}” :匹配对个属性

例:src/{a,b}.js(包含a.js和b.js文件) src/*.{jpg,png,gif}(src下的所有jpg/png/gif文件);

	5."!"  : 排除文件

例:!src/a.js(不包含src下的a.js文件);

3.gulp.dest(输出的路径) 输出文件

4.gulp.series(task1, task2…) 设置任务执行顺序 串行执行

5.gulp.parallel(task1, task2,…) 设置任务执行顺序 并行执行

6.gulp.watch(globs, gulp.series/gulp.parallel()task1,task2,…) 监听文件变化,执行任务

gulp插件
插件说明
http-proxy-middleware服务器代理
gulp-sass编译scss
gulp-less编译less
gulp-concat自动添加前缀
gulp-concat合并文件
gulp-clean-css压缩css
gulp-webserver起服务
browser-sync起服务
gulp-htmlmin压缩html
gulp-imagemin压缩图片
gulp-uglify压缩js 不支持ES6
gulp-babelES6转ES5
编译scss与sass
# 安装gulp-sass
npm i gulp-sass --save-dev
npm i node-sass --save-dev
const sass = require("gulp-sass");
sass.compiler   = require('node-sass');
// sass的使用需要下载gulp-sass和node-sass
gulp.task("sass", async()=>{
    gulp.src(["./src/sass/**/*.scss"]) //指定sass的文件地址
    .pipe(sass()) // 调用sass处理的函数
    .pipe(gulp.dest("./dist/css/")); // 输出的地址
});
压缩css
# 安装gulp-csssnano
npm i gulp-cssnano --save-dev
const cssnano = require("gulp-cssnano")
gulp.task("cssnano", async()=>{
    gulp.src(["./src/css/**/*.css"])
    .pipe(cssnano()) // 调用cssnano的函数压缩css代码
    .pipe(gulp.dest("./dist/css/"));
});
起服务 gulp-connect
# 安装gulp-connect
npm i gulp-connect --save-dev
const connect = require("gulp-connect");
let connect_options = {
    root : "./dist/",  // 服务的根目录
    port : 3000,
    livereload : true
}

gulp.task("connect", async()=>{
    connect.server(connect_options);  // 启动服务
})
压缩html
# 安装gulp-htmlmin
npm i gulp-htmlmin --save-dev
const htmlMin = require("gulp-htmlmin");
gulp.task("htmlmin", async()=>{

    gulp.src(["./src/html/**/*.html"])
    .pipe(htmlMin()) // 压缩html代码
    .pipe(gulp.dest("./dist/"));
})

gulp-htmlmin的参数设置

{
    removeComments: true,//清除HTML注释
    collapseWhitespace: true,//压缩HTML
    collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
    removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
    removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
    removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
    
}
压缩图片
# 安装gulp-imagemin
npm i gulp-imagemin --save-dev
const imagemin = require("gulp-imagemin");
gulp.task("imagemin", async () => {

    gulp.src(["./src/images/**/*.{png,jpg,jpeg,gif}"])
        .pipe(imagemin({
            optimizationLevel: 5, //类型:Number  默认:3  取值范围:0-7(优化等级)
            progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
            interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
            multipass: true //类型:Boolean 默认:false 多次优化svg直到完全优化
        })).pipe(gulp.dest("./dist/images/"));
})
压缩js
# 安装 uglify
npm i gulp-uglify --save-dev
const uglify = require("gulp-uglify");

gulp.task("uglify", async()=>{
    gulp.src(["./src/js/**/*/js"])
    .pipe(uglify()) // 压缩js
    .pipe(gulp.dest("./dist/js/"));
})

ugilify的参数

{
    mangle: true,//类型:Boolean 默认:true 是否修改变量名
    mangle: {except: ['require' ,'exports' ,'module' ,'$']}//排除混淆关键字
    compress: true,//类型:Boolean 默认:true 是否完全压缩
    preserveComments: 'all' //保留所有注释
}
编译ES6
# 安装 gulp-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
const babel = require("gulp-babel");

gulp.task("babel", async()=>{
    gulp.src(["./src/js/**.js"])
    .pipe(babel({
        presets : ["@babel/env"]
    })).pipe(gulp.dest("./dist/js/"));
})
代理
# 安装代理 http-proxy-middleware
npm i http-proxy-middleware --save-dev
const proxy = require("http-proxy-middleware");
// 需要配合服务器插件使用
let connect_options = {
    root: "./dist/",  // 服务的根目录
    port: 3000,
    livereload: true,
    middleware : ()=>{
        return [
            proxy("/pdd",{
                target : "https://xxx.xxx.xxx.xxx/api", //api地址
                changeOrigin : true, // 是否改变同源
                pathRewrite : {
                    "/pdd" : ""  // 将多余的地址替换成
                }
            })
        ]
    }
}
开发环境
gulp.task('dev',gulp.series('任务名','任务名'))
线上环境
gulp.task('build',gulp.parallel('任务名','任务名'))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用 `gulp-useref` 并过滤指定 js 文件的示例: ```javascript const gulp = require('gulp'); const useref = require('gulp-useref'); gulp.task('build', function() { return gulp.src('src/*.html') .pipe(useref({ searchPath: ['src', '.'] })) // 过滤掉不需要处理的 js 文件 .pipe(gulp.dest('dist')); }); ``` 在这个示例中,我们使用 `gulp-useref` 来处理 HTML 文件,并将注释块中引用的 JS、CSS 文件合并到一个或多个文件中。同时,我们通过 `searchPath` 属性指定了搜索路径,这样 `gulp-useref` 就能够正确地解析 HTML 文件中的相对路径了。 接着,我们通过 `pipe` 方法将处理后的文件输出到 `dist` 目录中。在这个过程中,我们也可以使用 `gulp-if` 来过滤掉不需要处理的文件。例如,如果我们只想处理所有 `src` 目录下的 JS 文件,可以这样写: ```javascript const gulp = require('gulp'); const useref = require('gulp-useref'); const gulpIf = require('gulp-if'); gulp.task('build', function() { return gulp.src('src/*.html') .pipe(useref({ searchPath: ['src', '.'] })) // 只处理 src 目录下的 js 文件 .pipe(gulpIf('**/*.js', gulp.dest('dist'))) .pipe(gulp.dest('dist')); }); ``` 在这个示例中,我们使用 `gulp-if` 来过滤掉不需要处理的 JS 文件,而只处理 `src` 目录下的 JS 文件。这样,我们就能够只处理我们需要的文件了。 希望这个回答能够帮到你,如果你还有其他问题,可以继续问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值