微信小程序——gulp处理文件
懒癌直接贴代码,想写在写
因为最近搞了一下小程序,直接使用微信的开发者工具搞感觉有点不习惯,并且看了几篇给小程序瘦身的博客,决定给自己的项目做一套配置文件,使用gulp
来支持sass scss
文件编译以及上传之前压缩文件的空行之类的。
至于使用gulp没有使用webpack的原因,因为我不想处理js文件,可能是我研究明白吧。后续还可以添加把assets目录里面的资源上传到ftp或者cdn的功能~
JSON
json
文件开发时候直接复制到dist
目录下,生产的时候使用jsonminify
压缩
gulp.task('json',() => { return gulp.src('./src/**/*.json') .pipe(gulp.dest('./dist')) }) gulp.task('jsonPro', () => { return gulp.src('./src/**/*.json') .pipe(jsonminify()) .pipe(gulp.dest('./dist')) })
wxml
wxml
文件开发时候直接复制到dist
目录下,生产的时候使用htmlmin
压缩
gulp.task('templates', () => { return gulp.src('./src/**/*.wxml') .pipe(gulp.dest('./dist')) }) gulp.task('templatesPro', () => { return gulp.src('./src/**/*.wxml') .pipe(htmlmin({ collapseWhitespace: true, removeComments: true, keepClosingSlash: true })) .pipe(gulp.dest('./dist')) });
wxss
wxss
文件,这个处理就比较多了,没有使用的时候只能使用css,对于我这种习惯sass
的人来说有点痛苦。于是添加了sass
支持,支持了.sass
后缀的文件,会编译成wxss
格式的,原有wxss
文件中也支持了scss
语法
gulp.task('wxss', () => { var combined = combiner.obj([ gulp.src(['./src/**/*.{wxss,sass}', '!./src/styles/**']), sass().on('error', sass.logError), // gulp sass编译 autoprefixer([ 'iOS >= 8', 'Android >= 4.1' ]), // autoprofixer 自动添加 rename((path) => path.extname = '.wxss'), //重命名 gulp.dest('./dist') ]); combined.on('error', handleError); }); gulp.task('wxssPro', () => { var combined = combiner.obj([ gulp.src(['./src/**/*.{wxss,sass}', '!./src/styles/**']), sass().on('error', sass.logError), autoprefixer([ 'iOS >= 8', 'Android >= 4.1' ]), minifycss(), // 压缩 css文件 rename((path) => path.extname = '.wxss'), gulp.dest('./dist') ]); combined.on('error', handleError); });
JavaScript
虽说微信的IDE也支持ES6,但是还不是很完善,所以我使用Babel编译js。使用uglify压缩的js
gulp.task('scripts', () => { return gulp.src('./src/**/*.js') .pipe(babel({ presets: ['es2015'] })) .pipe(gulp.dest('./dist')) }) gulp.task('scriptsPro', () => { return gulp.src('./src/**/*.js') .pipe(babel({ presets: ['es2015'] })) .pipe(uglify({ compress: true, })) .pipe(gulp.dest('./dist')) })
gulpfile.js
const gulp = require('gulp') const del = require('del') const path = require('path') const autoprefixer = require('gulp-autoprefixer') const htmlmin = require('gulp-htmlmin') const sass = require('gulp-sass') const jsonminify = require('gulp-jsonminify2') const gutil = require('gulp-util') const combiner = require('stream-combiner2'); const babel = require('gulp-babel') const uglify = require('gulp-uglify') const rename = require("gulp-rename") const minifycss = require('gulp-minify-css') const runSequence = require('run-sequence') const jsonlint = require("gulp-jsonlint") var colors = gutil.colors; const handleError = function(err) { console.log('\n') gutil.log(colors.red('Error!')) gutil.log('fileName: ' + colors.red(err.fileName)) gutil.log('lineNumber: ' + colors.red(err.lineNumber)) gutil.log('message: ' + err.message) gutil.log('plugin: ' + colors.yellow(err.plugin)) }; gulp.task('clean', () => { return del(['./dist/**']) }) gulp.task('watch', () => { gulp.watch('./src/**/*.json', ['json']); gulp.watch('./src/assets/**', ['assets']); gulp.watch('./src/**/*.wxml', ['templates']); gulp.watch('./src/**/*.wxss', ['wxss']); gulp.watch('./src/**/*.sass', ['wxss']); gulp.watch('./src/**/*.js', ['scripts']); }); gulp.task('jsonLint', () => { var combined = combiner.obj([ gulp.src(['./src/**/*.json']), jsonlint(), jsonlint.reporter(), jsonlint.failAfterError() ]); combined.on('error', handleError); }); gulp.task('json', ['jsonLint'], () => { return gulp.src('./src/**/*.json') .pipe(gulp.dest('./dist')) }) gulp.task('jsonPro', ['jsonLint'], () => { return gulp.src('./src/**/*.json') .pipe(jsonminify()) .pipe(gulp.dest('./dist')) }) gulp.task('assets', () => { return gulp.src('./src/assets/**') .pipe(gulp.dest('./dist/assets')) }) gulp.task('templates', () => { return gulp.src('./src/**/*.wxml') .pipe(gulp.dest('./dist')) }) gulp.task('templatesPro', () => { return gulp.src('./src/**/*.wxml') .pipe(htmlmin({ collapseWhitespace: true, removeComments: true, keepClosingSlash: true })) .pipe(gulp.dest('./dist')) }); gulp.task('wxss', () => { var combined = combiner.obj([ gulp.src(['./src/**/*.{wxss,sass}', '!./src/styles/**']), sass().on('error', sass.logError), autoprefixer([ 'iOS >= 8', 'Android >= 4.1' ]), rename((path) => path.extname = '.wxss'), gulp.dest('./dist') ]); combined.on('error', handleError); }); gulp.task('wxssPro', () => { var combined = combiner.obj([ gulp.src(['./src/**/*.{wxss,sass}', '!./src/styles/**']), sass().on('error', sass.logError), autoprefixer([ 'iOS >= 8', 'Android >= 4.1' ]), minifycss(), rename((path) => path.extname = '.wxss'), gulp.dest('./dist') ]); combined.on('error', handleError); }); gulp.task('scripts', () => { return gulp.src('./src/**/*.js') .pipe(babel({ presets: ['es2015'] })) .pipe(gulp.dest('./dist')) }) gulp.task('scriptsPro', () => { return gulp.src('./src/**/*.js') .pipe(babel({ presets: ['es2015'] })) .pipe(uglify({ compress: true, })) .pipe(gulp.dest('./dist')) }) gulp.task('dev', ['clean'], () => { runSequence('json', 'assets', 'templates', // 'sass', 'wxss', 'scripts', 'watch'); }); gulp.task('build', [ 'jsonPro', 'assets', 'templatesPro', 'wxssPro', 'scriptsPro' ]); gulp.task('pro', ['clean'], () => { runSequence('build'); })
依赖
这里的gulp-jsonminify2
以及他相关的依赖根据自己的业务修复了一下解决了json空对象格式失败的问题
"dependencies": { "autoprefixer": "^6.6.0", "babel-eslint": "^7.1.1", "babel-preset-latest": "^6.16.0", "del": "^2.2.2", "gulp": "^3.9.1", "gulp-autoprefixer": "^3.1.1", "gulp-babel": "^6.1.2", "gulp-eslint": "^3.0.1", "gulp-htmlmin": "^3.0.0", "gulp-jsonlint": "^1.2.0", "gulp-jsonminify2": "^1.0.0", "gulp-load-plugins": "^1.4.0", "gulp-minify-css": "^1.2.4", "gulp-postcss": "^6.2.0", "gulp-rename": "^1.2.2", "gulp-ruby-sass": "^2.1.1", "gulp-sass": "^3.1.0", "gulp-uglify": "^2.0.0", "gulp-util": "^3.0.8", "run-sequence": "^1.2.2", "stream-combiner2": "^1.1.1" }
相关推荐
星辰的笔记 2020-07-04
zhongweinan 2020-06-10
jiangfulai 2020-04-18
hlihaihong 2020-01-13
kaosini 2020-01-12
kaosini 2020-01-12
FranksTD 2019-12-19
hlihaihong 2019-12-15
hlihaihong 2019-12-14
我有一只小松鼠 2019-12-14
FranksTD 2019-12-13
SeekerTime 2019-11-17
yuetingzhuying 2015-10-17
福叔 2019-09-06
kaosini 2019-09-06
RainyX 2019-07-01
hlihaihong 2019-07-01
idnochinese 2019-07-01
UndefineOrNull 2019-07-01