Gulp安装使用 - 配置解析

2022-09-01  本文已影响0人  CodeMT

环境安装

在项目中使用gulp

项目目录是这样的:这里包括配置文件,依赖包,还有最后输出的文件目录:


gulp配置文件

const gulp = require('gulp')
const htmlmin = require('gulp-htmlmin') // html压缩
const minifyCss = require('gulp-minify-css') // css压缩
const autoprefix = require('gulp-autoprefixer') // css兼容处理
const babel = require('gulp-babel') // 把es6语法解析成es5
const uglify = require('gulp-uglify') // js代码压缩
const rev = require('gulp-rev') // 对文件名加MD5后缀
const del = require('del') // 删除文件
const revCollector = require('gulp-rev-collector') // 替换路径
// const jshint = require('gulp-jshint')
// const concat = require('gulp-concat') // 合并文件
// const sass = require('gulp-sass') // sass转css

// html任务
gulp.task('revHtml', function () {
  const options = {
    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"
    minifyJS: true, // 压缩页面JS
    babel: true,
    minifyCSS: true // 压缩页面CSS
  }
  return gulp.src('./html/*.html').pipe(htmlmin(options)).pipe(gulp.dest('./build/html'))
})

// css任务
gulp.task('style', function () {
  return gulp
    .src('./css/*.css')
    .pipe(
      autoprefix({
        browsers: ['last 2 versions'],
        cascade: false
      })
    )
    .pipe(minifyCss())
    .pipe(rev())
    .pipe(gulp.dest('./build/css'))
    .pipe(rev.manifest('rev-css-manifest.json'))
    .pipe(gulp.dest('./build/css'))
})

// script任务 合并js/目录下得所有得js文件并输出到build/目录,然后gulp会重命名、压缩合并的文件,也输出到build/目录
gulp.task('js', function () {
  return gulp
    .src('./js/*.js')
    .pipe(babel()) // es6解析
    .pipe(uglify()) // 压缩
    .pipe(rev()) // 添加版本号
    .pipe(gulp.dest('./build/js'))
    .pipe(rev.manifest('rev-js-manifest.json'))
    .pipe(gulp.dest('./build/js'))
})

// Sass任务:编译scss/目录下的scss文件,并把编译完成的css文件保存到/css目录中
// gulp.task('sass', function () {
//   gulp.src('./scss/*.scss').pipe(sass()).pipe(gulp.dest('./css'))
// })

// img任务
gulp.task('images', function () {
  return gulp
    .src(['./images/*.jpg', './images/*.png', './images/*.gif'])
    .pipe(rev()) // 文件名加MD5后缀
    .pipe(gulp.dest('./build/images'))
    .pipe(rev.manifest('rev-images-manifest.json')) // 生成一个rev-manifest.json
    .pipe(gulp.dest('./build/images')) // 将rev-manifest.json保存到rev目录内
})

// html/css替换任务:使用rev替换成md5文件名
gulp.task('rev', function () {
  return gulp
    .src(['./build/**/*.json', './html/*.html'])
    .pipe(
      revCollector({
        replaceReved: true
      })
    )
    .pipe(gulp.dest('./html'))
})

// js替换任务
gulp.task('revjs', function () {
  // css,主要是针对img替换
  return gulp
    .src(['./build/**/rev-images-manifest.json', './build/js/*.js'])
    .pipe(
      revCollector({
        replaceReved: true,
        dirReplacements: {
          '../images': '../build/images'
        }
      })
    )
    .pipe(gulp.dest('./build/js'))
})

// img替换任务
gulp.task('revimg', function () {
  // css,主要是针对img替换
  return gulp
    .src(['./build/**/rev-images-manifest.json', './build/css/*.css'])
    .pipe(
      revCollector({
        replaceReved: true
      })
    )
    .pipe(gulp.dest('./build/css'))
})

// Link任务:检查js/目录下得js文件有没有报错或警告
// gulp.task('lint', function () {
//   gulp.src('./js/*.js').pipe(jshint()).pipe(jshint.reporter('default'))
// })

// 删除Build文件
gulp.task('clean:Build', function () {
  return del(['./build/**/'])
})

// 执行多个任务gulp4的用法 gulp.series()串行,gulp.parallel()并行
gulp.task(
  'default',
  gulp.series('clean:Build', gulp.parallel('js', 'images', 'style'), 'revimg', 'revjs', 'rev', function () {})
)

这里对上述代码做一些说明:

@babel/core

说明:

执行打包

因为 gulp 需要安装插件打包,不同的插件实现不同的功能,这里需要额外引入其他插件,对应如上配置文件
需要什么功能就引入什么插件

npm install --save-dev gulp-babel @babel/core gulp-concat gulp-uglify gulp-rev gulp-rev-collector gulp-htmlmin del gulp-autoprefixer gulp-minify-css

第一点注意: 输入gulp后提示“无法加载文件***,因为在此系统上禁止运行脚本。有关详细信息,请参阅~~”。出现这些报错信息时,是出现了权限问题,项目控制台输入Get-ExecutionPolicy -List查看执行策略,优先级由高到底

原因是因为 Process 作用域的执行策略为 Undefined
通过执行命令:Set-ExecutionPolicy RemoteSigned -Scope Process将值修改为 RemoteSigned 就可以了

第二点注意: 打包如果出现gulp-babel报错信息,是因为npm发布的gulp-babel版本问题,他并不会报错,仅仅是不更新压缩文件。

解决方法:

创建.babelrc文件

在项目根目录添加.babelrc文件,并添加如下代码:

{
  "presets": ["env"]
}

该文件的优势:

可解决浏览器缓存问题,提高代码的安全性,配置文件写好,操作起来很方便

该文件的劣势:

打包之后会生成新的目录文件,相当于复制了一份,会占用更多的空间,

最后打包

在根目录下执行命令 gulp 进行打包,打包成功如下:

上一篇 下一篇

猜你喜欢

热点阅读