什么是Gulp?如何使用Gulp
Gulp 是基于node.js的一个前端自动化构建工具,开发这可以使用它构建自动化工作流程(前端集成开发环境)。
使用gulp你可以简化工作量,让你把重点放在功能的开发上,从而提高你的开发效率和工作质量。
例如:你可以用gulp可以网页自动刷新,和MVVM开发模式很相似,如果你对vue.js有所了解的话,那么你一定不会陌生。你也可以使用gulp对sass进行预处理、代码检测、图片优化压缩、只需要一个简单的指令就能全部完成。
由于gulp是基于node.js开发的,所以你在使用gulp之前,必须要先安装node。然后你可以打开node服务器并执行 npm install gulp -g 全局安装gulp.
之后你需要创建一个工程目录,通过dos命令,进入刚创建好的工程目录,
然后执行npm init 创建package.json文件. 这个文件保存着你目录下的项目模块的相关信息。可以把它想象成你所用到模块儿的一个目录.
然后执行npm intall gulp --save-dev 本地安装gulp
在工程根目录下手动创建gulpfile.js文件。
然后你可以在gulpfile.js里最先引入gulp模块,在js文件中添加以下内容:
const gulp=require('gulp');
const uglify=require('gulp-uglify');
const concat=require('gulp-concat');
const babel=require('gulp-babel');
const sourcemaps=require('gulp-sourcemaps');
const cssmin=require('gulp-cssmin');
const imagemin=require('gulp-imagemin');
const htmlmin = require('gulp-htmlmin');
const connect=require('gulp-connect');
const clean=require('gulp-clean');
const revCollector = require('gulp-rev-collector');
const js_path=['./src/js/**/*.js'];
// 压缩html
gulp.task('html',function(){
const options = {
collapseWhitespace:true,
collapseBooleanAttributes:true,
removeComments:true,
removeEmptyAttributes:true, //清除所有的空属性
removeScriptTypeAttributes:true,
removeStyleLinkTypeAttributes:true,
minifyJS:true,//压缩html中的javascript代码。
minifyCSS:true //压缩html中的css代码。
};
return gulp.src('./src/*.html')
.pipe(htmlmin(options))
.pipe(revCollector({
replaceReved:true
}))
.pipe(gulp.dest('./dist'))
.pipe(connect.reload());
})
// 压缩js
gulp.task('js', ()=>{
return gulp.src(js_path)
.pipe(sourcemaps.init())
// babel编译
.pipe(babel({
presets: ['@babel/env']
}))
// concat会作合并,合并为1个js
.pipe(concat('bundle.min.js'))
.pipe(uglify())
.pipe(sourcemaps.write())
.pipe(gulp.dest('./dist/js/'))
.pipe(connect.reload());
});
// 压缩style-css
gulp.task('style', ()=>{
return gulp
.src(['./src/css/**/*.css'])
.pipe(concat('style.min.css'))
// cssmin css压缩
.pipe(cssmin())
.pipe(gulp.dest('./dist/css/'))
.pipe(connect.reload());
});
// 压缩images
gulp.task('images', ()=>{
return gulp
.src(['./src/img/**/*.jpg', './src/img/**/*.gif', './src/img/**/*.png'])
.pipe(imagemin([
imagemin.gifsicle({interlaced: true}),
imagemin.mozjpeg({
progressive: true,
}),
imagemin.optipng({optimizationLevel: 5})
]))
.pipe(gulp.dest('./dist/img/'));
});
gulp.task('watchs',function(){
gulp.watch('./src/*.html', gulp.series('html'));
gulp.watch('./src/css/**/*.css', gulp.series('style'));
gulp.watch('./src/js/**/*.js', gulp.series('js'));
});
gulp.task('connect:app',function(){
connect.server({
root:'src',//根目录
// ip:'192.168.3.162', 默认localhost
livereload:true,//自动更新
port:9999//端口
})
})
gulp.task('connect:dist',function(cb){
connect.server({
root:'src',
livereload:true,
port:9999
})
cb(); //执行回调,表示这个异步任务已经完成,起通作用,这样会执行下个任务
})
gulp.task('clean:app', function() {
return gulp.src('dist', {read: false})
.pipe(clean());
})
//gulp.series|4.0 依赖顺序执行
//gulp.parallel|4.0 多个依赖嵌套'html','css','js'并行
gulp.task('default', gulp.series(gulp.parallel('html','style','js','images')));
gulp.task('init', gulp.series('clean:app', gulp.parallel('html','style','js','images')));
//启动任务connect:app服务,并监控变化
gulp.task('dev', gulp.series('init', 'connect:app', 'watchs'));
// 生成打包文件
gulp.task('build', gulp.series('init'));
//启动任务connect:dist服务,生成打包文件后,监控其变化
gulp.task('server', gulp.series('connect:dist', 'build', 'watchs'));
第一次玩gulp,可把我整疯了。
一开始的目的:优化博客网站的速度。结果一直在倒腾gulp工具的安装。
第一个问题: Error: Cannot find module ‘@babel/core’
{ Error: Cannot find module '@babel/core'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (D:\hexo_blog\blog\node_modules\gulp-babel\index.js:7:15)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3) code: 'MODULE_NOT_FOUND' }
这个问题网上千篇一律的解决办法最后无果,最终这个方法不错:
gulp打包是不兼容ES6的,需要使用gulp-babel插件转义后方可打包。依次安装:
npm install gulp-babel --save-dev
npm install babel-preset-env --save-dev
npm install babel-core --save-dev
另外,还需要在根目录下加 .babelrc 文件,内容是
{
"presets": ["env"]
}
第二个问题:安装完后,执行 gulp
。。。无语了,这咋又开始少模块了捏。没办法少了啥,继续装啥,装完一个 继续 执行gulp
,一直提示缺模块,那就一直盘。
PS D:\hexo_blog\blog> gulp
{ Error: Cannot find module 'gulp-sourcemaps'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (D:\hexo_blog\blog\gulpfile.js:5:18)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3) code: 'MODULE_NOT_FOUND' }
装了一个还少了,我不知道我输了多少次npm install gulp-* --save-dev
{ Error: Cannot find module 'gulp-*'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (D:\hexo_blog\blog\gulpfile.js:10:13)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3) code: 'MODULE_NOT_FOUND' }
成功了!当装完最后一个modile之后,执行gulp
。似乎不缺了!好像行了惹! 到点了,下班。。
PS D:\hexo_blog\blog> gulp
[23:56:37] Using gulpfile D:\hexo_blog\blog\gulpfile.js
[23:56:37] Starting 'default'...
[23:56:37] Starting 'html'...
[23:56:37] Starting 'style'...
[23:56:37] Starting 'js'...
[23:56:37] Starting 'images'...
[23:56:38] Finished 'html' after 1 s
[23:56:38] Finished 'style' after 1 s
[23:56:38] Finished 'js' after 1.01 s
[23:56:38] gulp-imagemin: Minified 0 images
[23:56:38] Finished 'images' after 1.01 s
[23:56:38] Finished 'default' after 1.01 s
PS D:\hexo_blog\blog>