octopus-ad
Version:
Quickapp Sample Template
89 lines (74 loc) • 2.69 kB
JavaScript
const { src, dest, series } = require('gulp');
const { join } = require('path');
const fs = require('fs');
const gulpClean = require('gulp-clean');
const gulpCleanCss = require('gulp-clean-css');
const gulpUglify = require('gulp-uglify');
const gulpBabel = require('gulp-babel');
const gulpCopy = require('gulp-copy');
const componentPath = './src/components';
const packagePath = './components';
// 清理打包后的文件夹
const clean = () => {
return src(packagePath, { read: false, allowEmpty: true })
.pipe(gulpClean());
};
// 重建文件夹
const mkdir = (cb) => {
fs.mkdirSync(join(packagePath));
fs.mkdirSync(join(packagePath, 'style'));
fs.mkdirSync(join(packagePath, 'utils'));
fs.mkdirSync(join(packagePath, 'images'));
cb();
};
// babel,压缩js
const uglifyJs = () => {
return src(join(componentPath, 'utils/*.js'))
.pipe(gulpBabel({
presets: ['@babel/env']
})).pipe(gulpUglify()).pipe(dest(join(packagePath, 'utils')));
}
// 压缩css
const cleanCss = () => {
return src(join(componentPath, 'style/*.css'))
.pipe(gulpCleanCss()).pipe(dest(join(packagePath, 'style')));
}
// 压缩并复制ux文件
const copyUx = () => {
return src(join(componentPath, '**/*.ux'))
// .pipe(through2.obj(function(file, _, cb) {
// // 去除文件中的换行,注释
// const content = file.contents.toString().replace(/\n/g, '');
// file.contents = Buffer.from(content);
// cb(null, file);
// }))
.pipe(dest(join(packagePath)));
}
const copyImages = () => {
return src(join(componentPath, 'images/**/*'))
.pipe(gulpCopy(
join(packagePath, 'images'), {
prefix: 3
}
))
.pipe(dest(join(packagePath, 'images')));
}
// 打包前修改package.json,区分发布与本地开发
const prePublish = (cb) => {
const packageJson = require('./package.json');
const publishJson = require('./package.publish.json');
fs.writeFileSync('./package.json', JSON.stringify(publishJson, null, 2));
fs.writeFileSync('./package.publish.json', JSON.stringify(packageJson, null, 2));
cb()
}
const afterPublished = (cb) => {
const packageJson = require('./package.json');
const publishJson = require('./package.publish.json');
fs.writeFileSync('./package.json', JSON.stringify(publishJson, null, 2));
fs.writeFileSync('./package.publish.json', JSON.stringify(packageJson, null, 2));
cb()
}
const build = series(clean, mkdir, copyUx, copyImages, uglifyJs, cleanCss);
exports.prepublish = series(build, prePublish,)
exports.published = series(afterPublished);
exports.default = series(build);