[关闭]
@Lxyour 2017-05-24T21:21:08.000000Z 字数 4836 阅读 1072

Gulp新手入门教程

WEB-Build


Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务:

什么是Gulp?

Gulp是一个自动化构建工具,同类别的还有Grunt,webpack。

安装Gulp

安装Gulp之前你需要先安装Node.js
如果你还没安装Node,你可以在 这里 下载。

安装完Node.js,使用Terminal(终端,win下是cmd)用下面命令安装Gulp

  1. $ sudo npm install gulp -g

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

npm install是指定从Node Package Manager(npm 你怕毛)安装的命令。
-g表示全局安装,这样你在电脑上任何位置都能只用gulp 命令。
Mac 用户需要管理员权限才能全局安装,所以需要sudo

创建Gulp项目

首先,新建一个项目文件夹gulpDemo,并在该目录下执行npm init命令:

  1. $ npm init

npm init命令会为你创建一个package.json文件,这个文件保存着这个项目相关信息。比如你用到的各种依赖(这里主要是插件)
(先随便写package信息,填完之后终端会自动出现下面内容)

  1. {
  2. "name": "lxyour",
  3. "version": "1.0.0",
  4. "description": "testgulp",
  5. "main": "index.js",
  6. "dependencies": {
  7. "gulp": "^3.9.1"
  8. },
  9. "devDependencies": {},
  10. "scripts": {
  11. "test": "gulp test"
  12. },
  13. "keywords": [
  14. "gulp"
  15. ],
  16. "author": "TangXiao",
  17. "license": "ISC"
  18. }

创建完之后,我们执行下面的命令:

  1. $ npm install gulp --save-dev

这一次,我们局部安装Gulp。使用—save-dev,将通知计算机在package.json中添加gulp依赖。

  1. {
  2. "name": "lxyour",
  3. "version": "1.0.0",
  4. "description": "testgulp",
  5. "main": "index.js",
  6. "dependencies": {
  7. "gulp": "^3.9.1",
  8. "minimatch": "^3.0.3"
  9. },
  10. "devDependencies": {
  11. "gulp": "^3.9.1",
  12. "gulp-sass": "^2.3.2"
  13. },
  14. "scripts": {
  15. "test": "gulp test"
  16. },
  17. "keywords": [
  18. "gulp"
  19. ],
  20. "author": "TangXiao",
  21. "license": "ISC"
  22. }

执行完之后,gulp将创建node_modules文件夹,里面有个gulp文件夹。

目录结构

我们使用通用的webapp目录结构:

  1. |- app/
  2. |- sass/
  3. |- images/
  4. |- js/
  5. |- fonts/
  6. |- index.html
  7. |- dist/
  8. |- gulpfile.js
  9. |- node_modules/
  10. |- packge.json

第一个Gulp任务

首先在根目录新建一个gulpfile.js文件

  1. var gulp = require('gulp');

这行命令告知Node去node_modules中查找gulp包,先局部查找,找不到就去全局环境中查找。
找到之后就会赋值给gulp变量,然后我们就可以使用它了。

简单的任务如下所示:

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

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

写个HelloWorld,是这样的:

  1. gulp.task('test', function() {
  2. console.log('Hello World!');
  3. });

命令行中执行:

  1. $ gulp hello

将会输出Hello World!
实际开发中的Gulp任务大概是这样:

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

正如你所见,两个Gulp方法,src,dest,一进一出[捂脸.jpg]。

Gulp执行预处理

我们使用gulp-sass插件来编译Sass。
安装插件的步骤是这样的:1.安装 2.引入 3.使用

  1. $ npm install gulp-sass --save-dev
  1. var gulp = require('gulp');
  2. // Requires the gulp-sass plugin
  3. var sass = require('gulp-sass');
  1. gulp.task('sass', function(){
  2. return gulp.src('source-files')
  3. .pipe(sass()) // Using gulp-sass
  4. .pipe(gulp.dest('destination'))
  5. });

我们需要给sass任务提供源文件和输出位置。所以我们先在项目中创建app/scss文件夹,里面有个styles.scss文件。
这个文件将在gulp.src中用到。

sass处理之后,我们希望它生成css文件并产出到app/css目录下,可以这样写:

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

测试一下:

  1. /* styles.scss */
  2. .testing {
  3. width: percentage(5/7);
  4. }

执行gulp sass,你将看到dist/css/styles.css文件下会有下面的代码:

  1. /* styles.css */
  2. .testing {
  3. width: 71.42857%;
  4. }

styles.css是gulp自动为我们生成的。
percentage 是Sass的方法。

使用Sass就这么简单。但是通常我们不止有一个scss文件。这时候可以使用Node通配符。

Node中的通配符

通配符是一种匹配模式,允许你匹配到多个文件。不止是Node,很多平台都有,有点像正则表达式。

使用通配符,计算机检查文件名和路径进行匹配。

大部分时候,我们只需要用到下面4种匹配模式:

  1. *.scss号匹配当前目录任意文件,所以这里.scss匹配当前目录下所有scss文件
  2. **/*.scss:匹配当前目录及其子目录下的所有scss文件。
  3. !not-me.scss:!号移除匹配的文件,这里将移除not-me.scss
  4. *.+(scss|sass):+号后面会跟着圆括号,里面的元素用|分割,匹配多个选项。这里将匹配scss和sass文件。
    那么还是上面的栗子,改造一下:
  1. gulp.task('sass', function() {
  2. return gulp.src('app/scss/**/*.scss') // Gets all files ending with .scss in app/scss and children dirs
  3. .pipe(sass())
  4. .pipe(gulp.dest('app/css'))
  5. })

自动检测并执行

我们可以使用watch命令,自动检测并执行。

监听Sass文件:

Gulp提供watch方法给我们,语法如下:

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

将上面的栗子再改下:

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

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

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

执行gulp watch命令。
有了监听,每次修改文件,Gulp都将自动为我们执行任务。

自动刷新

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

  1. $ npm install browser-sync --save-dev

引入:

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

使用:
我们创建一个broswerSync任务,我们需要告知它,站点根目录在哪里。

  1. gulp.task('browserSync', function () {
  2. browserSync({
  3. server: {
  4. baseDir: 'app'
  5. },
  6. })
  7. })

我们稍微修改一下之前的代码,让每次css文件更改都刷新一下浏览器:

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

现在我们配置好Broswer Sync了,我们需要运行这两个命令。

我们可以在watch任务之前告知Gulp,先把browserSync和Sass任务执行了再说。
语法如下:

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

应用下来是这样:

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

现在你执行gulp watch命令,在执行完browserSync和Sass,才会开始监听。
并且现在浏览器的显示的页面为app/index.html。你修改了styles.scss之后,浏览器将自动属性页面。
附加:
不止是scss修改的时候需要刷新浏览器吧?再改改:

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

到目前为止,我们做了下面三件事:

拓展阅读

Gulp新手入门教程

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注