一, gulp工具
用自动化构建工具增强你的工作流程 , gulp
安装Gulp工具 , 是基于node.js环境的 , 所以要现有node.js环境才行。
npx 不需要安装到电脑里就可以用 ,gulp将开发流程中让人痛苦或耗时的任务自动化 ,从而减少你所浪费的时间 , 创造更大价值
npm i -D gulp
npm install – global gulp-cli 在命令行中去使用gulp命令
npm install --save-dev gulp 在代码中去使用 require(‘gulp’)
要先 npm init 初始化,把package.json文件配好了 ,然后在要写gulp的路径下 安装 -D gulp
cnpm install gulp
npm init
2.创建gulpfile.js文件
做任务的文件 gulpfile.js 是node中的文件
比如引入
var path = require('path);
var fs = require('fs');
3.任务
一个任务就是一个函数
每个gulp任务(task) 都是一个异步的JS函数 。 此函数是一个可以接收callback作为参数的函数 , 或者是一个返回stream , promise ,event emitter ,child process 或 observable类型值的函数 ,由于某些平台的限制 而不支持异步任务, 因此gulp还提供了一个替代品 。
function defaultTask(){
console.log(123);
}
module.exports={
default : defaultTask
}
在命令行里输入 gulp default ,
如何让这个函数结束呢 ? callback ,stream , promise ,event emitter ,child process 或 observable
function defaultTask(cb){
console.log(123);
cb();
}
module.exports={
default : defaultTask //当任务的名字是default 可以省略。 只去调用命令gulp
}
4.gulp方法
gulp的工具常见方法
src() : 创建一个流, 用于从文件系统读取 vinyl对象(虚拟的文件格式)
dest() : 创建一个用于将Vinyl 对象写入到文件系统的流
series() : 任务按顺序执行
parallel() : 任务同时执行
watch():监听文件改变并在发生更改时运行任务
pipe() : 连接转换流或可写流 (可以理解成jquery中的链式操作)
var { series ,parallel , src , dest} = require('gulp');
function defaultTask(cb){
console.log(123)
}
function txtTask(){
return src('./src/*.txt').pipe( dest('./dist') ) //pipe管道不需要引用 可以用 .dest写入dist文件(没有也可以自己创建)
}
module.exports = {
default : defaultTask,
testTask : testTask,
all : series(defaultTask , testTask)
}
5.gulp常见任务 :css
gulp-sass :sass处理
cnpm i -D gulp -sass
var sass = require('gulp-sass')
function sassTask(){
return src('./src/*.scss').pipe( sass() ).pipe( dest('./dist') )
}
module.exports = {
sass : sassTask
}
gulp-autoprefixer 自动添加浏览器前缀
var autoprefixer= require('gulp-sass')
function autoTask(){
return src('./src/*.scss').pipe( autoprefixer({
browsers: ['last 2 versions', 'Android >=4.0' ,'<5%'] //配置
}) ).pipe( dest('./dist') )
}
module.exports = {
auto: autoTask
}
gulp-cssmin : 压缩css文件
cnpm i gulp-cssmin
var cssmin = require('')
function cssminTask(){
return src('./src/*.css').pipe( cssmin() ).pipe( dest('./dist') );
}
module.exports{
cssmin: mincssTask
}
cnpm i -D gulp-rename 重命名文件
var rename = require('gulp-rename')
function cssTask(){
return src('./src/*.scss')
.pipe( sass() )
.pipe( autoprefixer() )
.pipe( cssmin() )
.pipe( rename(function(path)){
path.basename = path.basename + '.min' ;
})
.pipe( dest('./dist') );
}
gulp-clean 文件清理
cnpm i -D gulp-clean
var clean = require('gulp-clean')
function cleanTask(){
return src('./dist').pipe( clean() )
}
function cleanTask(){
return src('./dist',{allowEmpty : true}).pipe( clean() )//允许为空。表示可以忽略文件的存在
}
6.javascript
gulp-babel :把es6变成es5
view gulp-babel versions 查看版本
babeljs.io
安装 在指定的目录下 : cnpm i -D gulp-babel@7.0.0
gulp-uglify :把JS文件进行压缩的操作, 要先把es6转成es5 然后再压缩。
gulp-requirejs-optimize: 把require.js的模块进行合并
7.html
gulp-htmlmin : 把html文件进行压缩处理
var
function htmlminTask(){
return src('./src/*.html')
.pipe( htmlmin({
collapseWhite : true,
removeEmptyAttributes: true,
minifyCSS: true,
miniJS: true,
removeComments : true
}) )
.pipe( dest('./dist') )
}
module.exports = {
html : htmlminTask
}
gulp-file-include : 把html做成片段
@include(‘head.html’)
gulp-concat : 合并文件
gulp-if : 写任务的时候 , 可以进行条件处理的 。
gulp-webserver : 开启一个web服务器
function webserverTask(){
return src('./dist')
.pipe(webserver({
host : 'localhost',
port: 4000,
open: './index.html',
livereload : true // 热更新, 不刷新浏览器也能更新内容
}))
}