官網:https://www.gulpjs.com.cn/css
gulp的優點html
注意:當前學習的是gulp3.9.1版本,安裝時請指定版本,默認安裝的爲最新的版本4.0,兩版本有差異。node
gulp入門指南:https://www.gulpjs.com.cn/docs/getting-started/css3
yarn global add gulp
gulp -v
yarn add gulp@3.9.1 -D
var gulp = require('gulp'); //引入gulp
gulp.task('default', function() { //建立一個任務
// console.log('執行任務')
});
運行任務git
gulp
會執行默認('default')的task任務gulp aaa
運行時若是報錯 *Cannot read property 'apply' of undefined
*,請從新安裝一下gulp-clinpm i gulp-cli -g
github
xxxxxxxxxx
gulp.task('default',['task1'],function(){
return gulp.src('./src/**/*')
.pipe(gulp.dest('./build/'))
//src()讀取文件
//pipe()至關於下一步的意思
//dest()輸出文件
});
xxxxxxxxxx
gulp.task('watchfile',function(){
gulp.watch('./src/index.html',function(){
console.log('發現文件變化了')
})
})
用法:https://www.npmjs.com/package/gulp-lessweb
本地安裝gulp-less yarn add gulp-less -D
npm
安裝完後查看package.json中的devDependencies是否有了json
gulpfile頂部引入gulp-lessgulp
xxxxxxxxxx
var less = require('gulp-less');
建立less任務
xxxxxxxxxx
gulp.task('less',function(){
gulp.src('./src/less/*.less') //讀取less文件
.pipe(less()) //編譯less
.pipe(gulp.dest('./src/css')) //輸出到指定文件夾
});
本地安裝gulp-less yarn add gulp-concat -D
安裝完後查看package.json中的devDependencies是否有了
gulpfile頂部引入gulp-concat
xxxxxxxxxx
var less = require('gulp-less');
建立concat任務
xxxxxxxxxx
gulp.task('concat',function(){
gulp.src('./src/css/*.css')//讀取less文件
.pipe(concat('all.css'))//合併css文件,並指定合併後文件的名字
.pipe(gulp.dest('./src/css'))//輸出到指定文件夾
});
安裝和引入同上gulp-less
https://www.npmjs.com/package/gulp-clean-css
xxxxxxxxxx
gulp.task('concat',function(){
gulp.src('./src/css/*.css')//讀取less文件
.pipe(concat('all.css'))//合併css文件,並指定合併後文件的名字
.pipe(cleanCSS())//壓縮合並後的css文件
.pipe(gulp.dest('./src/css'))//輸出到指定文件夾
});
安裝和引入同上gulp-less
https://www.npmjs.com/package/del
xxxxxxxxxx
gulp.task('del',function(){
del([//參數爲數組
'./src/css/*.css',//要刪除的文件
'./build/*'//要刪除的文件
])
});
https://www.npmjs.com/package/gulp-babel
安裝時請根據npm網站上的提示操做以避免版本不一致致使報錯:npm install --save-dev gulp-babel @babel/core @babel/preset-env
建立js任務,把src中js文件中的js文件編譯爲es5後輸出到build的js文件夾中
xxxxxxxxxx
gulp.task('js',function(){
gulp.src('./src/js/*.js')//讀取文件
.pipe(babel({//編譯,參數請參照npm網站上的提示
presets:['@babel/env']
}))
.pipe(gulp.dest('./build/js'))//輸出文件
});
只需在編譯後在concat一下
xxxxxxxxxx
gulp.task('js',function(){
gulp.src('./src/js/*.js')//讀取文件
.pipe(babel({//編譯,參數請參照npm網站上的提示
presets:['@babel/env']
}))
.pipe(concat('all.js'))//合併編譯後的js
.pipe(gulp.dest('./build/js'))//輸出文件
});
須要的插件
安裝和引入同上gulp-less
xxxxxxxxxx
.pipe(rename('./all.min.js')) gulp.task('js',function(){
return gulp.src('./src/js/*.js')
.pipe(babel({ //編譯js
presets:['@babel/env']
}))
.pipe(concat('all.js')) //合併js
.pipe(uglify()) //壓縮js
.pipe(rename('./all.min.js'))//此處路徑是相對於以前的js文件(all.js)的路徑
.pipe(gulp.dest('./build/js'))
.pipe(reload({
stream:true
}))
});
https://www.npmjs.com/package/gulp-imagemin
xxxxxxxxxx
gulp.task('img',function(){
gulp.src('./src/images/*') //讀取
.pipe(imagemin([
imagemin.gifsicle({interlaced:true}), //gif
imagemin.jpegtran({progressive:true,arithmetic:true}), //jpg
imagemin.optipng({ //png
optimizationLevel:5,
}),
imagemin.svgo({ //svg
plugins:[
{removeViewBox:true},
{cleanupIDs:false}
]
})
],{verbose:true})) //log單個圖片的壓縮比
.pipe(gulp.dest('./build/images')) //輸出
});
gulp img
https://www.npmjs.com/package/gulp-css-spriter
安裝和引入同上gulp-less
在合併css以後生成精靈圖
xxxxxxxxxx
gulp.task('css',['less'],function(){
return gulp.src('./src/css/*.css')
.pipe(concat('all.css'))
.pipe(spriter({//精靈圖
'spriteSheet': './src/images/spritesheet.png',//精靈圖名字,和輸出路徑
'pathToSpriteSheetFromCSS': '../images/spritesheet.png'//css中使用精靈圖的路徑
}))
.pipe(cleanCSS())
.pipe(gulp.dest('./src/css'))
});
執行gulp css
https://www.npmjs.com/package/gulp-base64
能夠減小請求,base64不用發送請求,小圖適合轉base64,
大圖不適合,由於大圖的base64字符串很長很長
安裝和引入同上gulp-less
建立base64任務,把css檢索,小圖編譯成base64輸出到build目錄下css
xxxxxxxxxx
gulp.task('base64',function(){
return gulp.src('./src/css/*.css')
.pipe(base64({
baseDir: './src/images',
extensions: ['svg', 'png', /\.jpg#datauri$/i],
exclude: [/\.server\.(com|net)\/dynamic\//, '--live.jpg'],
maxImageSize: 5*1024, // bytes
debug: true
}))
.pipe(gulp.dest('./build/css'))
});
執行gulp base64
瀏覽器實時、快速響應穩健更改Browsersync
先安裝再引入
xxxxxxxxxx
var browserSync = require('browser-sync').create();//瀏覽器同步
xxxxxxxxxx
gulp.task('server',function(){
browserSync.init({
server: {
baseDir: "./", //設置服務器跟目錄
index:'./src/index.html' //設置首頁
},
port:8080//設置端口號
});
})
此時運行gulp server
會自動打開瀏覽器,但修改源代碼時瀏覽器並不會自動更新。
想要文件保存時瀏覽器自動更新就得進行重載
開啓服務器的同時,咱們能夠經過watch監聽文件的改變而後再重載相應的文件,就能夠從新加載內容了
watch路徑請勿使用./開頭,./開頭
監聽不到新增的文件
xxxxxxxxxx
gulp.watch('src/*.html',['reload']);
gulp.watch('src/less/*.less',['css']);
gulp.watch('src/js/*.js',['js']);
該模塊是browserSync的子模塊,不用從新安裝引入便可
xxxxxxxxxx
var reload = browserSync.reload;//手動重載
咱們能夠在開啓服務器的時候開始監聽
xxxxxxxxxx
gulp.task('server',function(){
browserSync.init({
server: {
baseDir: "./", //設置服務器跟目錄
index:'./src/index.html' //設置首頁
},
port:8080
});
gulp.watch('./src/*.html',['reload']); //監聽html改變就去執行reload
gulp.watch('./src/less/*.less',['css']); //監聽less改變就去執行css
gulp.watch('./src/js/*.js',['js']);//監聽js改變就去執行js
});
//reload任務用來重載html文件
gulp.task('reload',function(){
gulp.src('./src/*.html') //讀取文件
.pipe(reload({ //對讀取到的文件開啓重載
stream:true
}))
});
//css任務執行完後記得也重載一次css
gulp.task('css',['less'],function(){
return gulp.src('./src/css/*.css')
.pipe(concat('all.css')) //合併css
.pipe(cleanCSS()) //壓縮css
.pipe(gulp.dest('./src/css'))
.pipe(reload({//重載css
stream:true
}))
});
//js任務執行完後記得也衝在一次js
gulp.task('js',function(){
return gulp.src('./src/js/*.js')
.pipe(babel({ //編譯js
presets:['@babel/env']
}))
.pipe(concat('all.min.js')) //合併js
.pipe(uglify()) //壓縮js
.pipe(gulp.dest('./build/js'))
.pipe(reload({//重載
stream:true
}))
});
先安裝gulp-rev,再引入(同gulp-less)
xxxxxxxxxx
return gulp.src('./src/css/*.css')
.pipe(concat('all.css')) //合併css
.pipe(cleanCSS()) //壓縮css
.pipe(rename({ suffix: '.min' }))
.pipe(rev())//輸出帶版本號的css文件
.pipe(gulp.dest('./build/css'))
.pipe(reload({
stream:true
}))
xxxxxxxxxx
return gulp.src('./src/css/*.css')
.pipe(concat('all.css')) //合併css
.pipe(cleanCSS()) //壓縮css
.pipe(rename({ suffix: '.min' }))
.pipe(rev())//輸出帶版本號的css文件
.pipe(gulp.dest('./build/css'))//輸出css
.pipe(rev.manifest())//生成映射文件.json
.pipe(gulp.dest('./rev/css/'))//輸出映射文件
.pipe(reload({
stream:true
}))
xxxxxxxxxx
var revCollector = require('gulp-rev-collector'); //引入
建立rev任務,更新html中的全部引用路徑
xxxxxxxxxx
gulp.task('rev',function(){
gulp.src(['./rev/**/*.json','./src/*.html'])//讀取到全部映射文件和html文件
.pipe(revCollector({}))//替換字符創路徑
.pipe(gulp.dest('./build/'))
});
https://www.npmjs.com/package/gulp-notify
https://www.npmjs.com/package/gulp-sequence
xxxxxxxxxx
https://www.npmjs.com/package/gulp-sequence
xxxxxxxxxx
runSequence('build-clean',['build-scripts', 'build-styles'],'build-html',callback)
以逗號隔開的爲同步,按順序從左到右,
數組內的爲異步並行
若是該插件打包時老師報錯,試試刪除node文件從新install,
若是還不行,試試先移除該插件再用npm安裝