gulp使用入门

API 文档
所有压缩插件,可参考gulp官方或者node官方

1.安装node和gulp:
node安装暂不介绍。
gulp安装:本地安装: npm install gulp / npm install gulp --save-dev
ps:如果只是本地安装,后面在使用gulp命令的时候会报错,所以还需要全局安装npm install gulp -g
ps:另外这里介绍下 npm install gulp 和 npm install gulp --save-dev的区别:

添加 package到: dependencies(生产环境)
npm install <package-name> --save 或
npm install <package-name>
添加 package到: devDependencies(开发环境)
npm install <package-name> --save-dev

dependencies主要是放一些你程序跑起来所必须的模块
devDependencies主要放一些工具类的模块,你打包之后就不需要了的,比如ES6转ES5,scss转css,文件压缩等等。

如下图,我们要在gulp目录下,本地安装gulp,安装好之后里面就会有一个node_modules文件夹(里面放的我们安装的gulp,后面的插件也都是在这里,不详细介绍)


image.png

2.新建:assets放源文件,dist放压缩后的文件,以及一个 gulpfile.js 文件:

image.png

ps:package.json文件是怎么来的?有什么用?可以查下node相关知识,下面简单介绍下:
使用node init即可初始化文件夹,创建package.json文件,这里面记录了你安装的所有包。如果你的代码要给另一个人使用,而node_modules文件夹又太大,不方便上传到代码库,那个人也不可能把你安装的所有依赖包一个一个再安装一遍,这个时候如果有package.json文件,直接使用npm install,就可以把要下载的包全部下载下来了。

gulp基础语法,使用压缩js来介绍,比如我们下面把assets下的js压缩到dist下

// 获取 gulp
var gulp = require('gulp');
//require() 是 node (CommonJS)中获取模块的语法。
//在 gulp 中你只需要理解 require() 可以获取模块。

// 获取 uglify 模块(用于压缩 JS)
var uglify = require('gulp-uglify');

// 压缩 js 文件
// 在命令行使用 gulp script 启动此任务
gulp.task('script', function() {
    // 1. 找到文件
    gulp.src('assets/*.js')
    // 2. 压缩文件
        .pipe(uglify())
    // 3. 另存压缩后的文件
        .pipe(gulp.dest('dist/js'))
})
// gulp.task(name, fn) - 定义任务,第一个参数是任务名,第二个参数是任务内容。
// gulp.src(path) - 选择文件,传入参数是文件路径。
// gulp.dest(path) - 输出文件
// gulp.pipe() - 管道,你可以暂时将 pipe 理解为将操作加入执行队列

3.可以看到上面的代码里面依赖gulp-uglify这个模块,下面我们用node安装gulp-uglify模块,命令:npm install gulp-uglify --save-dev
然后跳转至 gulpfile.js 所在目录,执行 gulp script 命令,js压缩就完成了

4.优化,自动更新。当 js 里面的js更新后,自动执行 gulp script
可以使用 gulp.watch(src, fn) 检测指定目录下文件的修改后执行任务。
但是没有命令可以运行 gulp.watch(),需要将 gulp.watch() 包含在一个任务中。
接着在命令行输入 gulp auto,自动监听 js/*.js 文件的修改,并压缩js。我们在 gulpfile.js 后面添加如下代码:

// 在命令行使用 gulp auto 启动此任务
gulp.task('auto', function () {
    // 监听文件修改,当文件被修改则执行 script 任务
    gulp.watch('assets/*.js', ['script'])
})

5.最后,使用 gulp.task('default', fn) 定义默认任务(通俗点说,就是把里面的两个任务合并起来,这样就不用执行多次了)
此时你可以在命令行直接输入 gulp +回车,运行 script 和 auto 任务。我们在 gulpfile.js 后面添加如下代码:

// 使用 gulp.task('default') 定义默认任务
// 在命令行使用 gulp 启动 script 任务和 auto 任务
gulp.task('default', ['script', 'auto'])

PS.若被压缩的js有的在子目录,有的在二级子目录,则可使用**,比如下面代码,可以找到 assets/js 文件夹下的所有js文件:
gulp.src('assets/js/**/*.js')

下面贴上一个基础的gulpfile.js,压缩html,压缩js,压缩css,压缩img,scss转css等等
相关依赖包:

image.png

var gulp = require('gulp'),
    uglify = require('gulp-uglify'), //压缩js
    sass = require('gulp-sass'),//scss转css
    minifycss = require('gulp-minify-css'),//压缩css//gulp-minify-css已经被废弃,请使用gulp-clean-css,用法一致。
    imagemin = require('gulp-imagemin'),//压缩image
    htmlmin = require('gulp-htmlmin'),//压缩html
    concat = require('gulp-concat'),//合并文件
    rename = require('gulp-rename'),//重命名
    del = require('del');//删除,一般执行压缩前,先删除文件夹里的内容

// 执行压缩前,清空文件夹
gulp.task('clean', function() {
    return del(['dist/html','dist/css','dist/js','dist/img'])//异步操作,只有return后再执行其他动作,才不会顺序混乱。
//下面可以不用加return,因为没有顺序优先级
});

gulp.task('jsmin', function() {
    var options = {
        dirname: "aa",//aa文件夹下,一般不设置
        basename: "bb",//文件名,一般不设置
        prefix: "cc-",//前缀,一般不设置
        suffix: "-dd",//后缀,一般只用设置这个属性,比如:.min
        extname: ".js"//文件类型,一般不设置
    }// 这个生成的结果:aa文件夹下有个cc-bb-dd.js
    gulp.src('assets/js/**/*.js')
        .pipe(concat('main.js'))//合并所有js到main.js
        .pipe(rename(options))//rename压缩后的文件名
        .pipe(uglify())//压缩
        .pipe(gulp.dest('dist/js'));//输出
})

gulp.task('cssmin', function(){
    gulp.src('assets/scss/**/*.scss')
        .pipe(sass())//转成css
        .pipe(minifycss())//压缩css
        .pipe(gulp.dest('dist/css'))
});

gulp.task('imagemin', function(){
    gulp.src('assets/img/**/*.{png,jpg,gif}')
        .pipe(imagemin())
        .pipe(gulp.dest('dist/img'))
});

gulp.task('htmlmin', function () {
    var options = {
        removeComments: true,//清除HTML注释
        collapseWhitespace: true,//压缩HTML
        collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
        removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
        removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
        removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
        minifyJS: true,//压缩页面JS
        minifyCSS: true//压缩页面CSS
    };
    gulp.src('assets/html/**/*.html')
        .pipe(htmlmin(options))
        .pipe(gulp.dest('dist/html'));
});

gulp.task('auto', function () {
    gulp.watch('assets/js/**/*.js', ['jsmin']);
    gulp.watch('assets/scss/**/*.scss', ['cssmin']);
    gulp.watch('assets/html/**/*.html', ['htmlmin']);
    gulp.watch('assets/img/**/*.{png,jpg,gif}', ['imagemin']);
})


gulp.task('default', ['clean'], function() {
    gulp.start('auto','jsmin','cssmin','htmlmin','imagemin');
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容