gulp入门

50 阅读2分钟

1.gulp的简介

1.gulp中文文档(www.gulpjs.com.cn/)

2.简单,高效,实用,node最佳实践,生态丰富

2.gulp的安装

 $ npm install --global gulp-cli 
 $ gulp --version

3.gulp配置文件 :gulpfile.js(gulp.js - 基于流(stream)的自动化构建工具 | gulp.js中文网 (gulpjs.com.cn)

4.gulp工作流

创建任务(task)->输入文件(source)->处理文件(todo)->输出(dest)

image-20230904163115142.png

5.gulp实现自动化

  1. 创建目录gulp-demo

  2. 初始化npm init-y

  3. 安装开发依赖:

    $ npm install -D gulp

    $ npm install -D gulp-uglify gulp-sass sass node-sass gulp-clean gulp-load-plugins browser-sync

  4. 创建gulp配置文件gulpfile.js

  5. 创建需要处理的文件目录app,子目录js/index.js,css/index.sass

    gulpfile.js

 const {src,watch,series,dest} = require('gulp')
 ​
 const sass = require('gulp-sass')(require('sass'));
 const clean =require("gulp-clean")
 const browserSync = require('browser-sync').create()
 const reload = browserSync.reload; // 重新加载
 // const uglify = require("gulp-uglify")
 // gulp-uglify => plugins.uglify =>require("gulp-uglify")
 const plugins =  require('gulp-load-plugins')() // gulp插件可以使用 plugins-xxx 的方式引入
 ​
 // 处理html
 function html(cb) {
   console.log("html task");
   cb()
 }
 ​
 // 处理css
 function css(cb) {
   console.log("css task");
   src('app/css/*.sass')
   .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
   .pipe(dest('output/css'))
   .pipe(reload({
     stream:true
   }))
   cb()
 }
 ​
 // 处理js任务
 function js(cb) {
   console.log("js task");
   src('app/js/*.js')
   .pipe(plugins.uglify())
   .pipe(dest('output/js'))
   .pipe(reload({
     stream:true
   }))
   cb()
 }
 ​
 //监考文件变动
 function watcher(cb){
   console.log("watcher task");
   watch('app/js/*.js',js,)
   watch('app/css/*.sass',css)
   cb()
 }
 // 清除dist
 function cleantask(cb){
   console.log("clean task");
   src('output/',{ read: false, allowEmpty: true })
   .pipe(clean({ allowEmpty: true }))
   cb()
 }
 //开启server
 function serve(cb){
   browserSync.init({
     server: {
         baseDir: "./"
     }
   });
   cb()
 }
 ​
 exports.html = html;
 exports.css = css;
 exports.js = js;
 exports.cleantask = cleantask;
 exports.serve = serve;
 exports.watcher = watcher;
 exports.default = series([cleantask,html,css,js,serve,watcher]); // 将任务函数和/或组合操作组合成更大的操作,这些操作将按顺序依次执行
 ​

6.gulp实现热更新

Browsersync - 省时的浏览器同步测试工具 | Browsersync 中文文档 (bootcss.com)

 const browserSync = require('browser-sync').create()
 const reload = browserSync.reload; // 重新加载
 ​
 // 处理js任务
 function js(cb) {
   console.log("js task");
   src('app/js/*.js')
   .pipe(plugins.uglify())
   .pipe(dest('output/js'))
   .pipe(reload({
     stream:true
   }))
   cb()
 }
 ​
 //开启server
 function serve(cb){
   browserSync.init({
     server: {
         baseDir: "./"
     }
   });
   cb()
 }
 exports.default = series([cleantask,html,css,js,serve,watcher]);

7.总结

1.相比较webpack,个人觉得配置起来更简单灵活,如果项目不是很复杂,又需要构建,gulp也是一个不错的选择。

2.以任务的形式处理资源文件,一个方法代表一个处理的资源。可以单独处理,也可以一起集中处理。cb() 回调是类似与async await的形式,保证当前任务处理完在处理下一任务。

3.提供了处理任务的各种形式的api,如parallel() 将任务功能和/或组合操作组合成同时执行的较大操作,如series() 将任务功能和/或组合操作组合成同时执行的较大操作。

8.demo:www.npmjs.com/package/gen…