返回

从零构建小程序脚手架

前端

当我们开发小程序时,往往需要重复地执行一些任务,例如编译Sass文件、压缩图片、生成雪碧图等。为了提高开发效率,我们可以使用构建工具GULP来自动化这些任务。

GULP简介

GULP是一个前端开发工具,它可以帮助我们自动化重复性的任务。GULP使用任务流的方式来执行任务,我们可以通过配置任务流来定义任务的执行顺序。GULP还提供了丰富的插件,我们可以使用这些插件来实现各种各样的任务。

搭建脚手架步骤

1. 安装GULP

npm install -g gulp-cli

2. 创建项目目录

mkdir my-app
cd my-app

3. 初始化项目

npm init -y

4. 安装GULP及其相关插件

npm install gulp gulp-sass gulp-autoprefixer gulp-imagemin gulp-cheerio gulp-svgmin gulp-htmlmin gulp-clean-css gulp-concat gulp-uglify

5. 创建gulpfile.js文件

在项目根目录下创建gulpfile.js文件,并添加以下代码:

const gulp = require('gulp');
const sass = require('gulp-sass');
const autoprefixer = require('gulp-autoprefixer');
const imagemin = require('gulp-imagemin');
const cheerio = require('gulp-cheerio');
const svgmin = require('gulp-svgmin');
const htmlmin = require('gulp-htmlmin');
const cleanCSS = require('gulp-clean-css');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');

// 编译Sass文件
gulp.task('sass', function() {
  return gulp.src('src/sass/*.scss')
    .pipe(sass().on('error', sass.logError))
    .pipe(autoprefixer({
      browsers: ['last 2 versions'],
      cascade: false
    }))
    .pipe(gulp.dest('dist/css'));
});

// 压缩图片
gulp.task('imagemin', function() {
  return gulp.src('src/images/*')
    .pipe(imagemin())
    .pipe(gulp.dest('dist/images'));
});

// 压缩SVG文件
gulp.task('svgmin', function() {
  return gulp.src('src/svg/*')
    .pipe(svgmin())
    .pipe(gulp.dest('dist/svg'));
});

// 压缩HTML文件
gulp.task('htmlmin', function() {
  return gulp.src('src/*.html')
    .pipe(cheerio({
      run: function($) {
        $('script').each(function() {
          var src = $(this).attr('src');
          if (src) {
            $(this).replaceWith(`<script src="${src}"></script>`);
          }
        });
        $('link').each(function() {
          var href = $(this).attr('href');
          if (href) {
            $(this).replaceWith(`<link href="${href}" rel="stylesheet">`);
          }
        });
      }
    }))
    .pipe(htmlmin({
      collapseWhitespace: true,
      removeAttributeQuotes: true,
      removeComments: true,
      removeEmptyAttributes: true,
      removeTagWhitespace: true,
      minifyCSS: true,
      minifyJS: true
    }))
    .pipe(gulp.dest('dist'));
});

// 压缩CSS文件
gulp.task('cleanCSS', function() {
  return gulp.src('src/css/*.css')
    .pipe(cleanCSS())
    .pipe(gulp.dest('dist/css'));
});

// 合并JS文件
gulp.task('concatJS', function() {
  return gulp.src('src/js/*.js')
    .pipe(concat('all.js'))
    .pipe(gulp.dest('dist/js'));
});

// 压缩JS文件
gulp.task('uglifyJS', function() {
  return gulp.src('dist/js/all.js')
    .pipe(uglify())
    .pipe(gulp.dest('dist/js'));
});

// 监视文件变化
gulp.task('watch', function() {
  gulp.watch('src/sass/*.scss', ['sass']);
  gulp.watch('src/images/*', ['imagemin']);
  gulp.watch('src/svg/*', ['svgmin']);
  gulp.watch('src/*.html', ['htmlmin']);
  gulp.watch('src/css/*.css', ['cleanCSS']);
  gulp.watch('src/js/*.js', ['concatJS', 'uglifyJS']);
});

// 默认任务
gulp.task('default', ['sass', 'imagemin', 'svgmin', 'htmlmin', 'cleanCSS', 'concatJS', 'uglifyJS', 'watch']);

6. 运行GULP任务

gulp

脚手架实现

以上步骤完成后,我们就搭建好了一个小程序脚手架。我们可以通过以下命令来使用这个脚手架:

gulp

该命令会执行所有任务,并将编译后的文件输出到dist目录中。

这个脚手架可以帮助我们快速开发小程序。我们可以通过修改src目录中的文件来修改小程序的代码,然后通过运行gulp命令来编译代码。