gulpfile.js 配置说明

gulp工具配置,自动执行打包压缩代码等命令

var autoprefixer = require('autoprefixer'),
	combiner = require('stream-combiner2'), //整合 streams 来处理错误
	gulp = require('gulp'),
	named = require('vinyl-named'),
	path = require('path'),
	plugins = require('gulp-load-plugins')(),
	webpack = require('webpack'),
	webpackStream = require('webpack-stream');

var dest = 'build', proj = '.';

gulp.task('build', function() {//build任务,执行styles、scriptsRelease、htmls、resources对应样式,js文件,html文件,静态资源图片等打包任务
	gulp.start('styles','scriptsRelease','htmls', 'resources');
});

gulp.task('dev', ['watch'], function() {//监察任务,代码改动执行资源文件打包
	gulp.start('styles','scripts','htmls', 'resources');
});

gulp.task('xiaodou', function() {//其他业务任务
	proj = '../cheways_xiaodou';
	dest = '../cheways_xiaodou/build';
	gulp.start('copy','styles','scripts','htmls', 'resources');
});

gulp.task('copy',function(){
	gulp.src('common/**/*.*')
		.pipe(plugins.changed(proj+'/common'))
		.pipe(gulp.dest(proj+'/common'));
	gulp.src('lib/**/*.*')
		.pipe(plugins.changed(proj+'/lib'))
		.pipe(gulp.dest(proj+'/lib'));
	gulp.src('index.html')
		.pipe(plugins.changed(proj))
		.pipe(gulp.dest(proj));
});

gulp.task('watch',function(){
	gulp.watch('src/**/*.@(css|styl)',['styles']);
	gulp.watch('src/**/*.@(html|pug)',['htmls']);
	gulp.watch('src/**/*.@(png|jpg|ico|svg|gif)',['resources']);
	gulp.watch(proj+'/special/*.styl', ['styles']);
});

gulp.task('styles',function(){//styles命令处理css样式文件
	gulp.src('src/**/*.css')
		.pipe(plugins.changed(dest))
		.pipe(plugins.postcss([ autoprefixer({cascade: false}) ]))
		.pipe(plugins.cleanCss())
		.pipe(gulp.dest(dest));
	gulp.src('src/**/*.styl')
		.pipe(plugins.changed(dest,{extension:'.css'}))
		.pipe(plugins.stylus({paths: [proj+'/special']}))
		.pipe(plugins.postcss([ autoprefixer({cascade: false}) ]))
		.pipe(gulp.dest(dest));
	gulp.src('common/common.styl')
		.pipe(plugins.changed(proj+'/common',{extension:'.css'}))
		.pipe(plugins.stylus({paths: [proj+'/special']}))
		.pipe(gulp.dest(proj+'/common'));
});

gulp.task('scriptsRelease',function(){//scriptsRelease命令处理js文件压缩
	gulp.src('src/**/*.js')
		.pipe(named(function(file) {
			return file.relative.slice(0, -path.extname(file.path).length)
		}))
		.pipe(webpackStream({
			output: {
				publicPath: '../',
				chunkFilename: '[name].bundle.js',
			},
			resolve: {
				alias: {
					'vue$': 'vue/dist/vue.common.js',
					'cheways-vue$': '../../nopack/js/cheways-vue.js',
					'special': path.resolve(proj, 'special'),
				}
			},
			module: {
				rules: [
					{test: /\.vue$/, loader: 'vue-loader', options: {
						postcss: [require('autoprefixer')()]
					}},
					{test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },
				]
			},
			plugins: [
				new webpack.DllReferencePlugin({
					context: __dirname,
					manifest: require('./lib/vendors-manifest.json')
				})
			],
		}, webpack))
		.pipe(plugins.uglify())
		.pipe(gulp.dest(dest));
});

gulp.task('scripts',function(){
	gulp.src('src/**/*.js')
		.pipe(named(function(file) {
			return file.relative.slice(0, -path.extname(file.path).length)
		}))
		.pipe(webpackStream({
			output: {
				publicPath: '../',
				chunkFilename: '[name].bundle.js',
			},
			resolve: {
				alias: {
					'vue$': 'vue/dist/vue.common.js',
					'cheways-vue$': '../../nopack/js/cheways-vue.js',
					'special': path.resolve(proj, 'special'),
				}
			},
			module: {
				rules: [
					{test: /\.vue$/, loader: 'vue-loader', options: {
						postcss: [require('autoprefixer')()]
					}},
					{test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" },
				]
			},
			plugins: [
				new webpack.DllReferencePlugin({
					context: __dirname,
					manifest: require('./lib/vendors-manifest.json')
				})
			],
			watch: true,
		}, webpack))
		.pipe(gulp.dest(dest));
});

gulp.task('htmls',function(){//htmls命令处理html文件压缩等
	gulp.src('src/**/*.html')
		.pipe(plugins.changed(dest))
		.pipe(plugins.htmlmin())
		.pipe(gulp.dest(dest));
	var combined = combiner.obj([
		gulp.src('src/**/*.pug'),
		plugins.changed(dest,{extension:'.html'}),
		plugins.pug({}),
		gulp.dest(dest)
	]);
	combined.on('error', console.error.bind(console));
});

gulp.task('resources',function(){//resources命令处理资源图片
	gulp.src('src/**/*.@(png|jpg|ico|svg|gif)')
		.pipe(plugins.changed(dest))
		.pipe(gulp.dest(dest));
});

gulp.task('dist', function() {
	var androidProject = 'C:/Users/XL/workspace/cheways-common3/assets/apps/HelloH5/www/'
	gulp.src('build/**/*.*')
		.pipe(plugins.changed(androidProject+'build'))
		.pipe(gulp.dest(androidProject+'build'))
	gulp.src('lib/**/*.*')
		.pipe(plugins.changed(androidProject+'lib'))
		.pipe(gulp.dest(androidProject+'lib'))
	gulp.src('special/**/*.*')
		.pipe(plugins.changed(androidProject+'special'))
		.pipe(gulp.dest(androidProject+'special'))
	gulp.src('manifest.json')
		.pipe(plugins.changed(androidProject+'www'))
		.pipe(gulp.dest(androidProject+'www'))
})

gulp.task('distas', function() {
	var androidProject = 'C:/Users/XL/AndroidStudioProjects/cheways-common3/app/src/main/assets/apps/HelloH5/www'
	gulp.src('build/**/*.*')
		.pipe(plugins.changed(androidProject+'build'))
		.pipe(gulp.dest(androidProject+'build'))
	gulp.src('lib/**/*.*')
		.pipe(plugins.changed(androidProject+'lib'))
		.pipe(gulp.dest(androidProject+'lib'))
	gulp.src('special/**/*.*')
		.pipe(plugins.changed(androidProject+'special'))
		.pipe(gulp.dest(androidProject+'special'))
	gulp.src('manifest.json')
		.pipe(plugins.changed(androidProject+'www'))
		.pipe(gulp.dest(androidProject+'www'))
})

上次更新: 2/21/2020, 6:25:58 PM