gulp的使用以及居尔p新手入门教程

gulp的接纳以及居尔p新手入门教程

 

以为此文甚好,转载来自[http://w3ctrain.com/2015/12/22/gulp-for-beginners/\]
Gulp
是四个自动化学工业具,前端开发者能够使用它来处理大规模任务:

居尔p新手入门教程

原文 
http://w3ctrain.com/2015/12/22/gulp-for-beginners/

Gulp
是三个自动化学工业具,前端开发者能够动用它来拍卖大规模职责:

  • 搭建web服务器
  • 文件保留时自动重载浏览器
  • 利用预处理器如Sass、LESS
  • 优化能源,比如压缩CSS、JavaScript、压缩图片

当然居尔p能做的远不止那个。若是您够疯狂,你居然足以应用它搭建贰个静态页不熟悉成器。居尔p真的够用强劲,但您无法不学会精通它。

那是那篇小说的第3目标。辅助您打探居尔p的底蕴用法,助你早日成功一统天下的伟业。

在咱们深深明白此前,我们先来说说怎么是居尔p。

  • 搭建web服务器
  • 文件保留时自动重载浏览器
  • 使用预处理器如Sass、LESS
  • 优化能源,比如压缩CSS、JavaScript、压缩图片

怎么是居尔p?

接近居尔p的工具,大家一般号称营造工具。近期最盛行的三个构建工具是居尔p和Grunt。

一度有13分多的稿子论证它们在此之前的异议,你随便搜一下就领会了。

一言九鼎差距是您怎样行使他们创设自动化学工业作流。与Grunt相比较,居尔p尤其从简,执行效能更高。

让大家继续上学居尔p并搭建三个简短的工作流。

理所当然居尔p能做的远不止那个。假若你够疯狂,你甚至足以应用它搭建1个静态页目生成器。Gulp真的够用强大,但你不能不学会明白它。
那是那篇文章的关键指标。帮衬您询问居尔p的底子用法,助你早日形成一统天下的伟业。
在大家深深领悟此前,大家先来说说为何是Gulp。
干什么是居尔p?
看似Gulp的工具,大家普通号称构建筑工程具。近年来最流行的八个塑造筑工程具是居尔p和Grunt。主要差异是您如何使用他们创设自动化学工业作流。与Grunt相比较,居尔p尤其从简,执行功能更高。
让大家继续学习居尔p并搭建三个简约的工作流。
搭建本地web服务器
编译Sass
每当保存更改,自动刷新浏览器
优化&压缩财富

咱俩将要做的

那篇文章的结尾,你会具有简单的一个工作流:

  • 搭建本地web服务器
  • 编译Sass
  • 每当保存更改,自动刷新浏览器
  • 优化&压缩财富

除了这么些之外,你还将学会运用简易命令链式调用多少个任务。

除去,你还将学会使用简易命令链式调用四个职务。

安装Gulp

设置居尔p以前您需求先安装Node.js。

假若你还没安装Node,你能够在
这里 下载。

安装完Node.js,使用Terminal(终端,win下是cmd)用上边发号施令安装居尔p

$ sudo npm install gulp -g

只有mac用户才供给sudo命令,并且不要把$符号也复制进去,这不是你的菜。

npm install
是点名从Node Package Manager(npm 你怕毛)安装的授命。

-g
表示全局安装,那样你在微型总结机上其余地方都能只用gulp 命令。

Mac
用户须求管理员权限才能全局安装,所以需求sudo。

接下去使用居尔p创设项目。

安装Gulp

设置居尔p此前您供给先安装Node.js。倘使你还没安装Node,你能够在
这里 下载。
设置完Node.js,使用Terminal(终端,win下是cmd)用上面发号施令安装居尔p

$ sudo npm install gulp -g

唯有mac用户才供给sudo命令,并且不要把$符号也复制进去,这不是你的菜。

npm install

是点名从Node Package Manager(npm )安装的下令。-g
意味着全局安装,那样您在微型总结机上其余地方都能只用gulp 命令。
Mac 用户必要管理员权限才能全局安装,所以供给sudo。
接下去使用居尔p创建项目。

创建Gulp项目

第1,大家新建三个project文件夹,并在该目录下进行
npm init 命令:

$ npm init

npm
init命令会为您创设2个package.json文件,这一个文件保留着这么些项目相关消息。比如您用到的种种依赖(那里关键是插件)(终端会活动出现上边内容,那里先随便填就行)

葡京投注开户 1

开创完事后,大家履行下边包车型客车指令:

$ npm install gulp --save-dev

本次,大家一些安装居尔p。使用—save-dev,将通告计算机在package.json中添加gulp信赖。

葡京投注开户 2

推行完事后,gulp将开创node_modules文件夹,里面有个gulp文件夹。

葡京投注开户 3

在业内启幕在此之前,我们再来鲜明下项指标目录结构。

创建Gulp项目

率先,大家新建贰个project文件夹,并在该目录下实行npm init
命令:

$ npm init

npm
init命令会为您创制三个package.json文件,这么些文件保留着那些项目有关音信。比如您用到的各类正视(那里主倘使插件)(终端会活动出现上边内容,那里先随便填就行)

创造完之后,大家执行下边包车型大巴命令:

$ npm install gulp --save-dev

这一遍,我们有的安装居尔p。使用—save-dev,将通报总结机在package.json中添加gulp重视。

实行完事后,gulp将开创node_modules文件夹,里面有个gulp文件夹。
在这么些布局中,大家采纳app文件夹作为支付目录(全部的源文件都坐落那上边),dist文件夹用来存放在生产条件下的剧情。
这一个文件名,你想怎么起都行,但请务必牢记你的目录结构。未来大家来创制gulpfile.js。

目录结构

居尔p卓殊之灵活,理解它的中间工作,你就能在品种中百发百中。

那篇小说,我们利用通用的webapp目录结构:

葡京投注开户 4

在那几个结构中,大家使用app文件夹作为支出目录(全体的源文件都位于那下边),dist文件夹用来存放生产环境下的内容。

这么些文件名,你想怎么起都行,但请务必牢记您的目录结构。今后大家来创建gulpfile.js。

第一个Gulp任务

(你必要先在根目录下创制叁个gulpfile.js文件)。

var gulp = require(‘gulp‘);

那行命令告知Node去node_modules中检索gulp包,先局地查找,找不到就去全局环境中找寻。找到之后就会赋值给gulp变量,然后大家就能够利用它了。
回顾的职责如下所示:

gulp.task(‘task-name‘, function() { // Stuff here});

task-name 是给您的任务起的名字,稍后在命令行中执行gulp
task-name,将运转该任务。
写个HelloWorld,是那般的:

gulp.task(‘hello‘, function() { console.log(‘Hello World!‘);});

指令行中执行:

$ gulp hello

那么将会输出Hello World!。 够不难吗?
居尔p任务平日都会比那难一丁点,就一丁点。平日会包罗七个特定的居尔p方法和部分列居尔p插件。
大致那样:

gulp.task(‘task-name‘, function () { 
     return gulp.src(‘source-files‘) 
         .pipe(aGulpPlugin()) 
         .pipe(gulp.dest(‘destination‘)) 
})

正如您所见,三个居尔p方法,src,dest,一进一出。下边用编写翻译Sass来举栗子。

第一个Gulp任务

(你需求先在根目录下开创2个gulpfile.js文件)。

var gulp = require('gulp');

那行命令告知Node去node_modules中搜索gulp包,先局地查找,找不到就去全局环境中搜寻。找到之后就会赋值给gulp变量,然后大家就足以行使它了。

简言之的天职如下所示:

gulp.task('task-name', function() {
  // Stuff here
});

task-name
是给你的天职起的名字,稍后在指令行中执行gulp
task-name,将运转该任务。

写个HelloWorld,是如此的:

gulp.task('hello', function() {
  console.log('Hello World!');
});

命令行中执行:

$ gulp hello

这正是说将会输出Hello
World!。 够简单吗?

居尔p任务常常都会比那难一丁点,就一丁点。经常会蕴藏八个特定的居尔p方法和部分列Gulp插件。

大约那样:

gulp.task('task-name', function () {
  return gulp.src('source-files') // Get source files with gulp.src
    .pipe(aGulpPlugin()) // Sends it through a gulp plugin
    .pipe(gulp.dest('destination')) // Outputs the file in the destination folder
})

正如您所见,多少个居尔p方法,src,dest,一进一出[捂脸.jpg]。上边用编写翻译Sass来举栗子。

居尔p执行预处理

我们运用gulp-sass插件来编写翻译Sass。安装插件的步子是这般的:
运用npm install 命令安装

$ npm install gulp-sass --save-dev

在gulpfile中引入插件,用变量保存

var gulp = require(‘gulp‘);
// Requires the gulp-sass plugin
var sass = require(‘gulp-sass‘);

在任务中应用

gulp.task(‘sass‘, function(){ 
return gulp.src(‘source-files‘) 
.pipe(sass()) 
// Using gulp-sass
.pipe(gulp.dest(‘destination‘))});

咱俩要求给sass职务提供源文件和输出地方。所以大家先在项目中创制app/scss文件夹,里面有个styles.scss文件。那几个文件将在gulp.src中用到。
sass处理今后,大家期望它生成css文件并出现到app/css目录下,可以这样写:

gulp.task(‘sass‘, function(){ 
return gulp.src(‘app/scss/styles.scss‘)
 .pipe(sass())
 // Converts Sass to CSS with gulp-sass
 .pipe(gulp.dest(‘app/css‘))});

测试一下:

// styles.scss
.testing { 
width: percentage(5/7);}

选择Terminal执行gulp
sass,你将看到app/css/styles.css文件下会有上边的代码:

/* styles.css */
.testing { 
width: 71.42857%;
}

styles.css是gulp智动为大家转移的。percentage 是Sass的办法。
行使Sass就像此简单。可是日常大家不断有1个scss文件。这时候能够接纳Node通配符。

居尔p执行预处理

咱俩应用gulp-sass插件来编写翻译Sass。安装插件的步骤是那样的:

  • 动用npm
    install 命令安装

    $ npm install gulp-sass --save-dev
    
  • 在gulpfile中引入插件,用变量保存

    var gulp = require('gulp');
    // Requires the gulp-sass plugin
    var sass = require('gulp-sass');
    
  • 在职责中利用

    gulp.task('sass', function(){
      return gulp.src('source-files')
        .pipe(sass()) // Using gulp-sass
        .pipe(gulp.dest('destination'))
    });
    

我们供给给sass职分提供源文件和输出地方。所以大家先在品种中成立app/scss文件夹,里面有个styles.scss文件。这几个文件将在gulp.src中用到。

sass处理未来,我们意在它生成css文件并出现到app/css目录下,能够那样写:

gulp.task('sass', function(){
  return gulp.src('app/scss/styles.scss')
    .pipe(sass()) // Converts Sass to CSS with gulp-sass
    .pipe(gulp.dest('app/css'))
});

测试一下:

// styles.scss
.testing {
  width: percentage(5/7);
}

使用Terminal执行gulp
sass,你将见到app/css/styles.css文件下会有上面包车型客车代码:

/* styles.css */
.testing {
  width: 71.42857%;
}

styles.css是gulp智动为大家转变的。percentage
是Sass的办法。

选拔Sass就好像此简单。不过常常我们不断有三个scss文件。这时候能够使用Node通配符。

Node中的通配符

通配符是一种匹配方式,允许你合作到四个文件。不止是Node,很多阳台都有,有点像正则表明式。
应用通配符,总结计算机检索查文件名和路径进行匹配。
多数时候,大家只供给利用下边4种匹配格局:

  • .scss:号匹配当前目录任意文件,所以那里*.scss匹配当前目录下全数scss文件
  • */.scss:匹配当前目录及其子目录下的有所scss文件。
  • !not-me.scss:!号移除匹配的公文,那里将移除not-me.scss
  • *.+(scss|sass):+号后边会随之圆括号,里面包车型大巴因素用|分割,匹配多少个挑选。那里将匹配scss和sass文件。

那么依旧地点的栗子,改造一下:

gulp.task(‘sass‘, function() { 
return gulp.src(‘app/scss/**/*.scss‘) 
// Gets all files ending with .scss in app/scss and children dirs .pipe(sass()) 
.pipe(gulp.dest(‘app/css‘))
})

别的app下的scss文件,在执行命令之后将扭转对应的css文件存放到对应路径。

Node中的通配符

通配符是一种匹配情势,允许你合作到几个文本。不止是Node,很多阳台都有,有点像正则表明式。

采取通配符,总结计算机检索查文件名和路线进行匹配。

大部时候,大家只需求接纳上面4种匹配形式:

  1. *.scss
    * 号匹配当前目录任意文件,所以那边 *.scss
    匹配当前目录下有所scss文件
  2. **/*.scss
    :匹配当前目录及其子目录下的具备scss文件。
  3. !not-me.scss
    :!号移除匹配的文书,那里将移除not-me.scss
  4. *.+(scss|sass)
    :+号后边会跟着圆括号,里面包车型客车因素用|分割,匹配多少个采用。那里将匹配scss和sass文件。

那正是说依然地点的栗子,改造一下:

gulp.task('sass', function() {
  return gulp.src('app/scss/**/*.scss') // Gets all files ending with .scss in app/scss and children dirs
    .pipe(sass())
    .pipe(gulp.dest('app/css'))
})

任何app下的scss文件,在执行命令之后将扭转对应的css文件存放到相应路径。(智动…)

葡京投注开户 5

于今大家能处理多少个文件了,不过不想每一次都要执行命令,怎么做?居尔p便是为懒人而生的,我们能够利用watch命令,自动物检疫查和测试并执行。

未来我们能处理七个文本了,不过不想每一遍都要执行命令,咋办?居尔p正是为懒人而生的,我们能够应用watch命令,自动物检疫查和测试并执行。

监听Sass文件

居尔p提供watch方法给大家,语法如下:

// Gulp watch syntax
gulp.watch('files-to-watch', ['tasks', 'to', 'run']);

将地点的栗子再改下:

// Gulp watch syntax
gulp.watch('app/scss/**/*.scss', ['sass']);

一般我们监听的还不只是3个文本,把它变成3个职责:

gulp.task('watch', function(){
  gulp.watch('app/scss/**/*.scss', ['sass']);
  // Other watchers
})

执行gulp
watch命令。

葡京投注开户 6

有了监听,每一次修改文件,Gulp都将电动为大家履行职分。

葡京投注开户 7

还不够,修改完直接帮自个儿刷新浏览器行吗,作者不想每一回都要手动按Command

  • R;

监听Sass文件

居尔p提供watch方法给大家,语法如下:

// Gulp watch syntax
gulp.watch(‘files-to-watch‘, [‘tasks‘, ‘to‘, ‘run‘]);

将方面包车型客车栗子再改下:

// Gulp watch syntax
gulp.watch(‘app/scss/**/*.scss‘, [‘sass‘]);

通常我们监听的还不只是贰个文件,把它变成一个任务:

gulp.task(‘watch‘, function(){ 
gulp.watch(‘app/scss/**/*.scss‘, [‘sass‘]); 
// Other watchers
})

执行gulp watch命令。

有了监听,每一趟修改文件,居尔p都将机关为我们执行职责。

还不够,修改完间接帮本身刷新浏览器可以吗,笔者不想每一回都要手动按Command + CRUISER;

采取Browser Sync自动刷新

Browser Sync
协助大家搭建简单的地面服务器并能实时刷新浏览器,它仍是能够
并且刷新八个装备

新插件?记住!安装,引入,使用。

$ npm install browser-sync --save-dev

那边没有gulp-前缀,因为browser-sync帮衬居尔p,所以没有人越发去搞三个给居尔p用。

var browserSync = require('browser-sync');

咱俩创制1个broswerSync职责,大家需求告诉它,根目录在哪儿。

gulp.task('browserSync', function() {
  browserSync({
    server: {
      baseDir: 'app'
    },
  })
})

咱俩稍事修改一下事先的代码,让每一次css文件更改都刷新一下浏览器:

gulp.task('sass', function() {
  return gulp.src('app/scss/**/*.scss') // Gets all files ending with .scss in app/scss
    .pipe(sass())
    .pipe(gulp.dest('app/css'))
    .pipe(browserSync.reload({
      stream: true
    }))
});

当今大家安顿好Broswer
Sync了,大家供给周转那八个指令。

我们可以在watch职责在此之前告诉居尔p,先把browserSync和Sass任务执行了再说。

语法如下:

gulp.task('watch', ['array', 'of', 'tasks', 'to', 'complete','before', 'watch'], function (){
  // ...
})

选用下来是那般:

gulp.task('watch', ['browserSync', 'sass'], function (){
  gulp.watch('app/scss/**/*.scss', ['sass']);
  // Other watchers
})

近年来您执行gulp
watch命令,在履行完browserSync和Sass,才会早先监听。

葡京投注开户 8

再正是以往浏览器的显得的页面为app/index.html。你改改了styles.scss之后,浏览器将活动属性页面。

葡京投注开户 9

绵绵是scss修改的时候必要刷新浏览器吧?再修改:

gulp.task('watch', ['browserSync', 'sass'], function (){
  gulp.watch('app/scss/**/*.scss', ['sass']);
  // Reloads the browser whenever HTML or JS files change
  gulp.watch('app/*.html', browserSync.reload);
  gulp.watch('app/js/**/*.js', browserSync.reload);
});

到近来停止,大家做了上边三件事:

  • 可运维的web开发服务
  • 使用Sass预处理器
  • 自行刷新浏览器

接受来说说优化方面包车型客车技术

行使Browser Sync自动刷新

Browser Sync 帮助我们搭建简单的本地服务器并能实时刷新浏览器,它仍是能够
[同时刷新四个设备]
新插件?记住!安装,引入,使用。

$ npm install browser-sync --save-dev

那边没有gulp-前缀,因为browser-sync协理居尔p,所以没有人尤其去搞1个给居尔p用。

var browserSync = require(‘browser-sync‘);

我们制造一个broswerSync职分,我们须求告诉它,根目录在哪个地方。

gulp.task(‘browserSync‘, function() { 
browserSync({ 
server:
 { baseDir: ‘app‘ 
},
 })
})

我们稍事修改一下在此以前的代码,让每一趟css文件更改都刷新一下浏览器:

gulp.task(‘sass‘, function() { 
return gulp.src(‘app/scss/**/*.scss‘)
 // Gets all files ending with .scss in app/scss
 .pipe(sass()) 
.pipe(gulp.dest(‘app/css‘)) 
.pipe(browserSync.reload({ stream: true }))});

今昔我们安插好Broswer Sync了,大家必要周转那三个指令。
大家得以在watch职分在此之前告诉Gulp,先把browserSync和Sass任务履行了再说。语法如下:

gulp.task(‘watch‘, [‘array‘, ‘of‘, ‘tasks‘, ‘to‘, ‘complete‘,‘before‘, ‘watch‘], function (){ 
// ...
})

使用下来是那样:

gulp.task(‘watch‘, [‘browserSync‘, ‘sass‘], function (){ gulp.watch(‘app/scss/**/*.scss‘, [‘sass‘]);
 // Other watchers
})

以往您执行gulp watch命令,在执行完browserSync和Sass,才会起来监听。

再者以往浏览器的展现的页面为app/index.html。你改改了styles.scss之后,浏览器将活动属性页面。

连发是scss修改的时候须求刷新浏览器吧?再修改:

gulp.task(‘watch‘, [‘browserSync‘, ‘sass‘], function (){ gulp.watch(‘app/scss/**/*.scss‘, [‘sass‘]); 
// Reloads the browser whenever HTML or JS files change gulp.watch(‘app/*.html‘, browserSync.reload); gulp.watch(‘app/js/**/*.js‘, browserSync.reload);
});

到近期截止,大家做了上面三件事:

  • 可运转的web开发服务
  • 应用Sass预处理器
  • 机动刷新浏览器

优化CSS和JavaScript文件

说到优化的时候,我们必要想到:压缩,拼接。也正是削减体量和HTTP次数。

开发者面临的机要难点是很难依照科学的顺序合并文件。

<body>
  <!-- other stuff -->
  <script src="js/lib/a-library.js"></script>
  <script src="js/lib/another-library.js"></script>
  <script src="js/main.js"></script>
</body>

由于文件路径的的例外,使用
https://www.npmjs.com/package/gulp-concat
等插件相当困难。

大快人心的是,
gulp-useref
化解了那一个标题。

gulp-useref会将七个文本拼接成单一文件,并出口到对应目录。

<!-- build:<type> <path> -->
... HTML Markup, list of script / link tags.
<!-- endbuild -->

能够是js,css,可能remove。借使您设为remove,居尔p将不会生成文书。

钦赐产出路径。

我们想最后出现main.min.js。能够这么写:

<!--build:js js/main.min.js -->
<script src="js/lib/a-library.js"></script>
<script src="js/lib/another-library.js"></script>
<script src="js/main.js"></script>
<!-- endbuild -->

咱俩来安装gulp-useref。

$ npm install gulp-useref --save-dev

引用

var useref = require('gulp-useref');

应用起来分外简单:

gulp.task('useref', function(){

  return gulp.src('app/*.html')
        .pipe(useref())
        .pipe(gulp.dest('dist'));
});

(新版的gulp-useref已经不须要写多余的useref.assets了)

履行useref命令,居尔p将统一四个script标签成2个文书,并保存到dist/js/main.min.js。

集合完之后,大家再来压缩。使用gulp-uglify插件。

安装

$ npm install gulp-uglify --save-dev

使用

// Other requires...
var uglify = require('gulp-uglify');
gulp.task('useref', function(){
  return gulp.src('app/*.html')
    .pipe(uglify()) // Uglifies Javascript files
    .pipe(useref())
    .pipe(gulp.dest('dist'))
});

搞定!

瞩目:执行完useref后,html中的script路径将只剩余main.min.js。

葡京投注开户 10

王祖蓝:完美~

gulp-useref同样能够用在css上。除了压缩,须要区分,别的内容同js一样。所以大家应用gulp-if来做分歧处理。

使用gulp-minify-css压缩css。

$ npm install gulp-if gulp-minify-css --save-dev

应用

var gulpIf = require('gulp-if');
var minifyCSS = require('gulp-minify-css');

gulp.task('useref', function(){

  return gulp.src('app/*.html')
    // Minifies only if it's a CSS file
    .pipe(gulpIf('*.css', minifyCSS()))
    // Uglifies only if it's a Javascript file
    .pipe(gulpIf('*.js', uglify()))
    .pipe(useref())
    .pipe(gulp.dest('dist'))
});

搞定!

再说说怎样缩短图片。同样easy。

接收来说说优化方面包车型客车技术

优化图片

使用gulp-imagemin插件。

$ npm install gulp-imagemin --save-dev

引入,使用

var imagemin = require('gulp-imagemin');
gulp.task('images', function(){
  return gulp.src('app**/*.+(png|jpg|gif|svg)')
  .pipe(imagemin())
  .pipe(gulp.dest('dist/images'))
});

(全部的gulp插件都是有相关参数可以配备,借使急需,请自行查看。)

调减图片恐怕会占用较长时间,使用
gulp-cache
插件能够削减重复压缩。

$ npm install gulp-cache --save-dev

引入、使用

var cache = require('gulp-cache');

gulp.task('images', function(){
  return gulp.src('app**/*.+(png|jpg|jpeg|gif|svg)')
  // Caching images that ran through imagemin
  .pipe(cache(imagemin({
      interlaced: true
    })))
  .pipe(gulp.dest('dist/images'))
});

接下去,大家说说发表流程。

优化CSS和JavaScript文件

说到优化的时候,我们需求想到:压缩,拼接。也正是减掉体量和HTTP次数。开发者面临的显要难点是很难遵照科学的顺序合并文件。

<body> 
<!-- other stuff --> 
<script src="js/lib/a-library.js"></script>
 <script src="js/lib/another-library.js"></script>
 <script src="js/main.js"></script></body>

鉴于文件路径的的不等,使用
[https://www.npmjs.com/package/gulp-concat\]等插件至极劳累。庆幸的是,gulp-useref
消除了这几个难点。
gulp-useref会将多个文本拼接成单一文件,并出口到对应目录。

<!-- build:<type> <path> -->
... HTML Markup, list of script / link tags.
<!-- endbuild -->

能够是js,css,也许remove。假使你设为remove,居尔p将不会扭转文书。
点名产出路径。
大家想最后出现main.min.js。能够这么写:

<!--build:js js/main.min.js -->
<script src="js/lib/a-library.js"></script>
<script src="js/lib/another-library.js"></script>
<script src="js/main.js"></script>
<!-- endbuild -->

咱俩来设置gulp-useref。

$ npm install gulp-useref --save-dev

引用

var useref = require(‘gulp-useref‘);

使用起来相当简单:

gulp.task(‘useref‘, function(){
 return gulp.src(‘app/*.html‘) 
.pipe(useref())
 .pipe(gulp.dest(‘dist‘));});

(新版的gulp-useref已经不要求写多余的useref.assets了)
执行useref命令,居尔p将统一四个script标签成三个文本,并保留到dist/js/main.min.js。
统一完事后,大家再来压缩。使用gulp-uglify插件。
安装

$ npm install gulp-uglify --save-dev

使用

// Other requires...
var uglify = require(‘gulp-uglify‘);
gulp.task(‘useref‘, function(){ 
return gulp.src(‘app/*.html‘) 
.pipe(uglify()) 
// Uglifies Javascript files 
.pipe(useref())
 .pipe(gulp.dest(‘dist‘))});

搞定!
留神:执行完useref后,html中的script路径将只剩余main.min.js。

理清生成文书

鉴于大家是自动生成文件,大家不想旧文件掺杂进来。

使用
del

npm install del --save-dev

引入、使用

var del = require('del');
gulp.task('clean', function() {
  del('dist');
});

可是大家又不想图片被剔除(图片改动的概率相当的小),启用新的职责。

gulp.task('clean:dist', function(callback){
  del(['dist/**/*', '!dist/images', '!dist**/*'], callback)
});

其一任务会删除,除了images/文件夹,dist下的即兴文件。为了知道clean:dist职分怎么时候做到,大家须要提供callback参数。

在有些时候大家还是需求消除图片,所以clean职务我们还需求保留。

gulp.task('clean', function(callback) {
  del('dist');
  return cache.clearAll(callback);
})

啊,小编的确是废话太多了。把大家学到的组合到一块啊!

gulp-useref同样能够用在css上。除了压缩,供给区分,其余内容同js一样。所以大家采取gulp-if来做分歧处理。使用gulp-minify-css压缩css。

$ npm install gulp-if gulp-minify-css --save-dev

应用

var gulpIf = require(‘gulp-if‘);
var minifyCSS = require(‘gulp-minify-css‘);
gulp.task(‘useref‘, function(){
 return gulp.src(‘app/*.html‘) 
// Minifies only if it‘s a CSS file
 .pipe(gulpIf(‘*.css‘, minifyCSS())) 
// Uglifies only if it‘s a Javascript file 
.pipe(gulpIf(‘*.js‘, uglify())) 
.pipe(useref()) 
.pipe(gulp.dest(‘dist‘))
});

组合Gulp任务

废话了这么多,大家主要有两条线路。

先是条是付出进程,大家便以Sass,监听文件,刷新浏览器。

其次条是优化,我们优化CSS,JavaScript,压缩图片,并把能源从app移动到dist。

开发职责大家地方的watch已经组建好了。

gulp.task('watch', ['browserSync', 'sass'], function (){
  // ... watchers
})

笔者们也做2个来实行第1条路线。

gulp.task('build', [`clean`, `sass`, `useref`, `images`, `fonts`], function (){
  console.log('Building files');
})

只是这么居尔p会同时触发
[] 的事件。大家要让clean在别的义务在此以前到位。

此地要用到
RunSequence

$ npm install run-sequence --save-dev

用法如下:

var runSequence = require('run-sequence');

gulp.task('task-name', function(callback) {
  runSequence('task-one', 'task-two', 'task-three', callback);
});

履行task-name时,居尔p会依照顺序执行task-one,task-two,task-thre。

RunSequence也同意你而且施行多个职务。

gulp.task('task-name', function(callback) {
  runSequence('task-one', ['tasks','two','run','in','parallel'], 'task-three', callback);
});

改造我们的代码:

gulp.task('build', function (callback) {
  runSequence('clean:dist',
    ['sass', 'useref', 'images', 'fonts'],
    callback
  )
})

开发职分大家也用runSequence:

gulp.task('default', function (callback) {
  runSequence(['sass','browserSync', 'watch'],
    callback
  )
})

default?
如果你的天职名字称为default,那么只需求输入gulp命令即可进行。

此间是大家最终的
代码仓库

再则说如何压缩图片。同样easy。

优化图片
使用gulp-imagemin插件。

$ npm install gulp-imagemin --save-dev

引入,使用

var imagemin = require(‘gulp-imagemin‘);
gulp.task(‘images‘, function(){ 
return gulp.src(‘app**/*.+(png|jpg|gif|svg)‘)
 .pipe(imagemin()) 
.pipe(gulp.dest(‘dist/images‘))
});

(全数的gulp插件都以有连带参数能够配备,若是须求,请自行查看。)压缩图片只怕会占有较长时间,使用
gulp-cache
插件能够减去重复压缩。

$ npm install gulp-cache --save-dev

引入、使用

var cache = require(‘gulp-cache‘);
gulp.task(‘images‘, function(){ 
return gulp.src(‘app**/*.+(png|jpg|jpeg|gif|svg)‘) 
// Caching images that ran through imagemin 
.pipe(cache(imagemin({ interlaced: true }))) .pipe(gulp.dest(‘dist/images‘))
});

接下去,我们说说发表流程。

总结

地点的的剧情搭建了二个主干的居尔p工作流。还有更卓绝的始末等着您去支付。那里提供些插件:

开发进度:

优化:

除了支付和优化进程,你能够选拔gulp-jasmine写JavaScript单元测试,甚至采取gulp-rync直接配置dist文件到生育环境。

清理生成文书

鉴于我们是自动生成文件,我们不想旧文件掺杂进来。使用
del

npm install del --save-dev

引入、使用

var del = require(‘del‘);
gulp.task(‘clean‘, function() { 
del(‘dist‘);
});

可是我们又不想图片被剔除(图片改动的可能率相当小),启用新的职责。

gulp.task(‘clean:dist‘, function(callback){ 
del([‘dist/**/*‘, ‘!dist/images‘, ‘!dist**/*‘], callback)});

其一职责会去除,除了images/文件夹,dist下的人身自由文件。为了精通clean:dist职责怎么时候做到,大家要求提供callback参数。
在好曾几何时候大家依然须要免去图片,所以clean职责大家还索要保留。

gulp.task(‘clean‘, function(callback) { 
del(‘dist‘); 
return cache.clearAll(callback);})

组成Gulp职责,大家珍视有两条线路。
率先条是支付进程,大家便以Sass,监听文件,刷新浏览器。
其次条是优化,大家优化CSS,JavaScript,压缩图片,并把财富从app移动到dist。
支付职务大家地点的watch已经组建好了。

gulp.task(‘watch‘, [‘browserSync‘, ‘sass‘], function (){
 // ... watchers
})

咱俩也做多个来执行第①条路线。

gulp.task(‘build‘, [`clean`, `sass`, `useref`, `images`, `fonts`], function (){
 console.log(‘Building files‘);
})

唯独这么居尔p会同时触发[]
的事件。大家要让clean在别的职务在此之前到位。那里要用到
RunSequence

$ npm install run-sequence --save-dev

用法如下:

var runSequence = require(‘run-sequence‘);
gulp.task(‘task-name‘, function(callback) { 
runSequence(‘task-one‘, ‘task-two‘, ‘task-three‘, callback);
});

实施task-name时,居尔p会依据顺序执行task-one,task-two,task-thre。RunSequence也同意你同时推行几个任务。

gulp.task(‘task-name‘, function(callback) { 
runSequence(‘task-one‘, [‘tasks‘,‘two‘,‘run‘,‘in‘,‘parallel‘], ‘task-three‘, callback);
});

改造大家的代码:

gulp.task(‘build‘, function (callback) { 
runSequence(‘clean:dist‘, [‘sass‘, ‘useref‘, ‘images‘, ‘fonts‘], callback )})

开发职分大家也用runSequence:

gulp.task(‘default‘, function (callback) { runSequence([‘sass‘,‘browserSync‘, ‘watch‘], callback )})

default? 假使你的义务名字叫做default,那么只需求输入gulp命令即可实行。
此间是大家最终的
代码仓库
总结
地点的的剧情搭建了一个着力的居尔p工作流。还有更尽善尽美的始末等着您去开发。那里提供些插件:
支出进度:
使用
Autoprefixer,你不再要求写CSS浏览器内核前缀
增加
Sourcemaps,让你更方便人民群众的调节和测试Sass,coffeescript
使用
sprity创造天使图
gulp-changed
只允许通过改动的文本
Babel

Traceur
写ES6
Browserify ,
webpack
, jspm
模块化JavaScript
Handlebars
,Swing
模块化Html
require-dir
分割gulpfile成七个公文
gulp-moderinizr
自动生成Modernizr脚本

优化:
unCSS
移除多余的CSS
CSSO
更深切地优化CSS
Critical
生成行内CSS

除成本付和优化进度,你能够应用gulp-jasmine写JavaScript单元测试,甚至运用gulp-rync直接配置dist文件到生育环境。
翻译的话
花了点时间去上学Gulp,那篇小说是我找到相比完美的,万分适合新手入门。
居尔p其实相当简单,多玩一下,你就能一心精晓它了,有力量来说,能够品尝开发Gulp插件。
我在
前端收藏夹
以及
选取gulp生成sprites图片和样式表
都有实施过。可是正如小编 Zell
Liew

所说,居尔p的无敌之处远不止这么些,所以他出了本电子书 automating your
workflow

,能够扶持你搭建属于本身的工作流,剩下时间去喝咖啡,有趣味的能够去选购,帮忙小编。

翻译的话

花了点时间去上学居尔p,那篇小说是作者找到相比完美的,分外适合新手入门。

居尔p其实十二分简单,多玩一下,你就能一心明白它了,有力量来说,能够品尝开发居尔p插件。

自个儿在前端收藏夹
以及
使用gulp生成sprites图片和样式表
都有执行过。

相关文章