文章目录
  1. 1. 一.安装Node
  2. 2. 二.npm 介绍
  3. 3. 三.选装cnpm
  4. 4. 四.全局安装gulp
  5. 5. 五.新建package.json文件
  6. 6. 六.新建gulpfile.js文件
  7. 7. 七.本地安装gulp
  8. 8. 8.插件与功能
  9. 9. 9.执行定义的一些任务

一.安装Node

直接去nodejs官网,点击绿色的 下载按钮,他会根据系统信息选择对应版本(.msi)文件,然后和安装qq一样,为了查看node 是否正确安装,node -v 查看版本号 以及npm -v 版本号

二.npm 介绍

npm(node package manager) nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等)

命令提示符执行:
npm install <name> [-g] [--save-dev]
  1. :node插件名称。例:npm install gulp-less –save-dev

  2. -g :全局安装。将会安装在C:\Users\Administrator\AppData\Roaming\npm,并且写入系统环境变量;
    非全局安装:将会安装在当前定位目录;
    全局安装可以通过命令行在任何地方调用它,本地安装将安装在定位目录的node_modules文件夹下,通过require()调用;

  3. –save :将保存配置信息至package.json(package.json是nodejs项目配置文件);

  4. -dev :保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点
    配置文件package.json是为了方便下载相关的包,只需要在有这个文件的文件夹下面执行“npm install”(如果安装了cnpm就用“cnpm install”),则会根据package.json下载所有需要的包。【注:我用demo中的package文件在另外一台电脑上面直接安装,打“gulp watch”的时候出现了很多错误】

三.选装cnpm

3.1、说明:因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事。来自官网:“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。”;

3.2、官方网址:http://npm.taobao.org

3.3、安装:命令提示符执行npm install cnpm -g –registry=https://registry.npm.taobao.org; 注意:安装完后最好查看其版本号cnpm -v或关闭命令提示符重新打开,安装完直接使用有可能会出现错误;

注:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm(以下操作将以cnpm代替npm)。

四.全局安装gulp

cnpm install gulp -g

如果在某个工程文件夹中提示错误,就手动在安装gulp

查看是否正确安装,gulp -v 有版本号就right

五.新建package.json文件

在命令窗口输入指令“cnpm init”。如果在Git Bash打这个指令,会报“No gulpfile found”的错误。

5.1、说明:package.json是基于nodejs项目必不可少的配置文件,它是存放在项目根目录的普通json文件;

5.2、它是这样一个json文件(注意:json文件内是不能写注释的,复制下列内容请删除注释):

{
  "name": "test",   //项目名称(必须)
  "version": "1.0.0",   //项目版本(必须)
  "description": "This is for study gulp project !",   //项目描述(必须)
  "homepage": "",   //项目主页
  "repository": {    //项目资源库
"type": "git",
"url": "https://git.oschina.net/xxxx"
  },
  "author": {    //项目作者信息
"name": "surging",
"email": "surging2@qq.com"
  },
  "license": "ISC",    //项目许可协议
  "devDependencies": {    //项目依赖的插件
"gulp": "^3.8.11",
    "gulp-less": "^3.0.0"
  }
}

六.新建gulpfile.js文件

gulpfile.js是gulp项目的配置文件,里面是task的配置。简易代码如下:

var gulp = require('gulp');

gulp.task('default', function() {
  // 将你的默认的任务代码放在这
});

七.本地安装gulp

cnpm install gulp --save-dev

到这你也许会问 为什么全局安装 项目还需要安装,因为全局安装gulp为了执行gulp任务,而本地安装gulp是为了调用gulp插件功能.

8.插件与功能

eg:1

现在我们创建一个Gulp任务来压缩JavaScript文件。首先创建一个名为gulpfile.js的文件,这是定义Gulp任务的地方,它可以通过gulp命令来运行,接着把下面的代码放到gulpfile.js文件里面。

var gulp = require('gulp'),
   uglify = require('gulp-uglify');

gulp.task('minify', function () {
   gulp.src('js/app.js')
  .pipe(uglify())
  .pipe(gulp.dest('build'))
});

然后在npm里面运行npm install -–save-dev gulp-uglify来安装gulp-uglify,最后通过运行gulp minify来执行任务。假设js目录下有个app.js文件,那么一个新的app.js将被创建在编译目录下,它包含了js/app.js的压缩内容。想一想,到底发生了什么?

我们只在gulpfile.js里做了一点事情。首先,我们加载gulp和gulp-uglify模块:

var gulp = require('gulp'),
uglify = require('gulp-uglify');

然后,我们定义了一个叫minify的任务,它执行时会调用函数,这个函数会作为第二个参数:

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

});

最后,也是难点所在,我们需要定义任务应该做什么:

gulp.src('js/app.js')
   .pipe(uglify())
   .pipe(gulp.dest('build'))

1)全局配置config

可以将需要在gulpfile中引用的参数,放到这里,包括一些路径,功能的开关等。例如:

//全局配置文件
module.exports = {
name : '.....',
devPath : '.....',    //项目根路径,根路径下可以包含多个项目
prodPath : '....', //生产路径根路径
sassPath : '.....', //SASS包含文件路径
rmHtmlWhitespace : false,//html中是否去除空格
server : {
    port : 8088
}
};

注意下这里使用了module.exports,这是nodejs的语法。在gulpfile中将会用require引用config。

//加载项目配置
var config = require('./config');

2)监控gulp.watch

这个是gulp自带的,就是当你的文件改动了后,就做相应的task。还有一个插件 gulp-watch

监控sass中的文件变化,一有变化就做sass的编译。“*”与“”这种语法可以参考《 Gulp:任务自动管理工具 》

gulp.task('watch', function() {
livereload.listen();
gulp.watch('**.html', ['html']);
  gulp.watch('./sass/*.scss', ['sass']);
  gulp.watch('./css/*.css', ['css']);
  gulp.watch('./js/*.js', ['js']);
});

监控了四个地方的修改,js、html、css和sass,并且有做了自动刷新 livereload 。这个是通过gulp- livereload来实现的。

firefox货chrome要分别安装插件才可运行。chrom插件如下:

安装完后会在浏览器中出现个小按钮,,注意是黑色的时候才是在执行中。还有就是要在相应的task中加相应的代码:

.pipe(livereload())

3)sass编译与css压缩

通过sass编写css,能更模块化,多人协作比较方便。安装 gulp-sass 。“ gulpPlumber() ”是引用了gulp-plumber,任务错误中断自动重传。

gulp.task('sass', function() {
gulp.src('./sass/*.scss')
        .pipe(plumber())
        .pipe(sass())
        .pipe(gulp.dest('./css'))
        .pipe(livereload());
});

gulp-cssnano ,压缩CSS代码。

gulp.task('css', ['sass'], function() {
//先删除dist中的css,有时候会不更新
gulp.src('./dist/css/*.css')
    .pipe(rimraf({force: true}));

gulp.src('./css/*.css')
    .pipe(cssnano())
    .pipe(gulp.dest('./dist/css'))
    .pipe(livereload());
});

4)js压缩与模块化合并

使用 gulp-uglify 做js的压缩。 gulpRimraf()用来删除文件夹,引用自 ]gulp-rimraf

模块化合并使用 webpack-stream

gulp.task('js', function() {
//先删除dist中的css,有时候会不更新
gulp.src('./dist/js/*.js')
    .pipe(rimraf({force: true}));

gulp.src('./js/*.js')
    .pipe(plumber())
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(uglify())
    .pipe(gulp.dest('./dist/js'))
    .pipe(livereload());
});

上面的jshint是用来分析代码的,例如分号没写。通过打指令“ gulp-jshint ” 。

5)image图片无损压缩

通过 gulp-image 压缩的图片,有时候能牙70%以上,非常给力。

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

6)html压缩

经过 gulp-htmlmin 压缩过的html可以缩小很多,可以看到都挤到了一起,有很多参数可以选择,比如去除空格等。

gulp.task('html', function() {
gulp.src('*.html')
    .pipe(htmlmin({collapseWhitespace: true}))
    .pipe(gulp.dest('./dist'))
    .pipe(livereload());
});

7)fontmin字体压缩

网上有很多webfont,例如国外的 Font Awesome ,国内的 iconfont 。都能做出漂亮的自定义字体。

与西文字体不同,由于字符集过大,中文字体无法享受 webfont 带来的便利。为了让中文字体也乘上这道风,我们需要对其进行min。使用指令gulp-fontmin

gulp.task('font', function() {
gulp.src('font/*.+(eot|svg|ttf|woff)')
  .pipe(fontmin({
      text: '人晒'
  }))
  .pipe(gulp.dest('dist/font'));
});

配置的两个字“人晒”与没配置的“国”,明显有区别。

8)启动一个本地调试服务器

通过 gulp-connect ,可以做个server。如果你用notpad++这种开发页面,那这个指令会很有用。

gulp.task('server', function(){
var option = {
    root : config.devPath,
    port : config.server.port
};
if(config.server.root){
    option.root = config.server.root;
}
connect.server(option);
});

上面的localhost可以改成本机的IP地址,手机与电脑在同一个网段的话,就可以直接用手机调试了。

9.执行定义的一些任务

gulp minify 

运行上文的列子 等等

文章目录
  1. 1. 一.安装Node
  2. 2. 二.npm 介绍
  3. 3. 三.选装cnpm
  4. 4. 四.全局安装gulp
  5. 5. 五.新建package.json文件
  6. 6. 六.新建gulpfile.js文件
  7. 7. 七.本地安装gulp
  8. 8. 8.插件与功能
  9. 9. 9.执行定义的一些任务