学习gulp以及问题的解决 -- 按照官方中文教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36146776/article/details/90265794

提前建议:学习gulp建议直接上英文网站上学习,因为中文网翻译不及时,已经out了。。
网站上参考别人学习也要看文章首次发表时间,否则你很有可能照着编译依旧不成功。

英文网站

在我看来,以下的皆因为跟着中文网学习,版本落后导致的bug

  • 1、AssertionError: Task function must be specified
    在这里插入图片描述
gulp.task('build',['minify'],async function (){
  await console.log("hello world");
});

以上这种写法是3的写法,4的写法是这样

gulp.task('build',gulp.series('minify', async function (){
  await console.log("hello world");
}));
import {logA} from './data';
logA();
//换成
var logA = require('./data.js');
logA();

gulp压缩scss文件

在这里插入图片描述

yarn add gulp-sass
yarn add gulp-minify-css
const {series,task,src,dest} = require('gulp');
const scss = require('gulp-sass');
const cssUglify = require('gulp-minify-css');//用于压缩css
function css(){
  return src('src/scss/*.scss')
    .pipe(scss())//编译
    .pipe(cssUglify())//压缩css
    .pipe(dest('output/css'))
}
exports.default = series(css);

//运行 gulp即可

gulp 将多个js打包成一个js文件

yarn add gulp-concat
yarn add gulp-uglify

const {series,task,src,dest} = require('gulp');
const concat = require('gulp-concat'); //用于连接js
const uglify = require('gulp-uglify'); //用于压缩JS
function js(){
  return src('src/js/*.js') // -> src('src/js/**/*.js') 两颗星则匹配js下所有的js文件
    .pipe(concat('build.min.js'))
    .pipe(uglify())
    .pipe(dest('output/js'))
}
exports.default = series(js);

实时编译

const { watch } = require('gulp');
exports.default = function() {
  // The task won't be run until 500ms have elapsed since the first change
  watch('src/*.js', { delay: 500 }, function(cb) {
    js();
  });
};

使用gulp打包并自动生成html对css,js文件打包后,添加版本号后的引用

const gulp = require('gulp');
const {series,task,src,dest,watch} = require('gulp');
const concat = require('gulp-concat');//用于合并文件
const uglify = require('gulp-uglify'); //用于压缩JS
const scss = require('gulp-sass');//编译css
const cssUglify = require('gulp-minify-css');//用于压缩css
//给文件添加版本号
const clean = require('gulp-clean') // 清空文件夹
const rev = require('gulp-rev');
const revCollector = require('gulp-rev-collector');

//CSS生成文件hash编码并生成 rev-manifest.json文件名对照映射
function revCss(){
  return src(['src/scss/*.scss','src/scss/*.css'])
    .pipe(concat('index.scss'))
    .pipe(scss())//编译
    .pipe(cssUglify())//压缩css
    .pipe(rev())
    .pipe(gulp.dest('output'))
    .pipe(rev.manifest())
    .pipe(dest('rev/css'))
}
// js生成文件hash编码并生成 rev-manifest.json文件名对照映射
function revJs(){
  return src('src/js/**/*.js')
    .pipe(concat('build.min.js'))
    // .pipe(uglify())
    .pipe(rev())
    .pipe(gulp.dest('output'))
    .pipe(rev.manifest())
    .pipe(dest('rev/js'))
}
//Html替换css、js文件版本
function revHtml() {
  return gulp.src(['rev/**/*.json', 'src/*.html'])
    .pipe(revCollector({
      replaceReved: true
    }))
    .pipe(dest('output'));
};
// 清空dist文件夹
function cleanAll(){
  return src(['rev/*','output/*'])
    .pipe(clean())
}
exports.default = series(cleanAll,revJs,revCss,revHtml);

demo的github地址:https://github.com/zxjzx/zxjzx.github.io/tree/master/projects/gulp

gulp命令
yarn init
yarn add gulp
yarn add gulp-concat
yarn add gulp-uglify
yarn add gulp-sass
yarn add gulp-minify-css
yarn add gulp-clean
新建gulpfile.js
webpack-dev-server 提供了一个简单的Web服务器和使用实时重新加载的能力
clean-webpack-plugin 删除旧的打包文件
style-loader css-loader css相关
html-webpack-plugin 打包HTML,自动更新css和js的引入
webpack-dev-middleware 是一个容器(wrapper),它可以把 webpack 处理后的文件传递给一个服务器(server)。 webpack-dev-server 在内部使用了它,同时,它也可以作为一个单独的包来使用,以便进行更多自定义设置来实现更多的需求。接下来是一个 webpack-dev-middleware 配合 express server 的示例。

猜你喜欢

转载自blog.csdn.net/sinat_36146776/article/details/90265794