Gulp

项目地址 https://github.com/LuckyChou710/ReStart-FE/tree/main/node/gulp

gulp 的基本使用

全局安装 gulp-cli 用于在命令行执行 gulp 命令

在项目中安装 gulp

yarn global add gulp-cli
yarn add gulp -D

gulp 的任务需要写在根目录下的 gulpfile.js

执行任务

// 基础使用
const task1 = (cb) => {
  setTimeout(() => {
    console.log('任务一执行了');
  }, 1000);
  cb();
};

module.exports = {
  task1,
};

然后在命令行输入 task1 即可执行 task1 任务

并行 / 串行

// 并行
gulp.parallel(task1, task2);
// 串行
gulp.series(task1, task2),

构建 css

安装 gulp-less gulp-clean-css

前者用于转换 less 后者用于压缩 css 注意两者在使用上有先后的依赖关系

const gulp = require('gulp');
const less = require('gulp-less');
const cleanCSS = require('gulp-clean-css');

// 处理less文件
const style = () => {
  return (
    gulp
      .src('src/style/main.less', { base: 'src' })
      // 转换less
      .pipe(less())
      // 压缩
      .pipe(cleanCSS())
      // 重命名
      .pipe(
        rename({
          extname: '.min.css',
        })
      )
      // 写入
      .pipe(gulp.dest('dist'))
  );
};

module.exports = {
  style,
};

构建 js

安装 gulp-uglify gulp-uglify

前者用于转换新的语法 后者用于压缩 js 代码

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const babel = require('gulp-babel');

const script = () => {
  return gulp
    .src('src/script/index.js', { base: 'src' })
    .pipe(
      babel({
        presets: ['babel-preset-env'],
      })
    )
    .pipe(uglify())
    .pipe(gulp.dest('dist'));
};

module.exports = {
  script,
};

构建 html

安装 gulp-htmlmin 用于压缩 html 代码

const gulp = require('gulp');
const htmlmin = require('gulp-htmlmin');

const html = () => {
  return gulp
    .src('src/index.html', { base: 'src' })
    .pipe(htmlmin({ collapseWhitespace: true }))
    .pipe(gulp.dest('dist'));
};
module.exports = {
  html,
};

部署服务

const browserSync = require('browser-sync');
const bs = browserSync.create();

const serve = () => {
  // 监听文件的更改 执行对应的任务
  gulp.watch('src/index.html', html);

  bs.init({
    notify: false,
    // 热更新
    files: 'dist/**',
    server: {
      baseDir: 'dist',
      // 映射node_modules下的文件
      routes: {
        '/node_modules': 'node_modules',
      },
    },
  });
};

Last updated

Was this helpful?