Gulp基础知识

  首先,我们需要了解Gulp能做些什么?

  1. 编译 sass                                        sass是什么?(使CSS可以用编程的方式写,加快我们开发的速度)
  2. 合并优化压缩 css
  3. 校验压缩 js
  4. 优化图片
  5. 添加文件指纹(md5)   (我百度的,我不知道这个是什么鬼,有兴趣的可以自行百度)
  6. 组件化头部底部(include html)
  7. 实时自动刷新…

   总之Gulp就是帮助前端开发中对代码自动化的构建,可以对开发中许多重复的操作进行自动化,使我们可以更加专注于代码,提高工作效率,还可以对资源进行优化(简直强到爆炸)。

  首先,我们需要下载node.js

  下载链接: https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi   (直接安装就好,安装地址不要出现中文!!!不要出现中文!!!)我就不说三遍!!!

  然后打开CMD命令窗口输入

node -v

  由于国内到NPM服务器的不稳定,所以我们一般采用淘宝镜像的方式去下载。

  更换NPM为淘宝源 

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

  好了,我们进入正题,安装Gulp!!!!

  1.首先我需要安装全局环境下的Gulp

    由于我们安装了淘宝镜像,可以快速的下载Gulp

cnpm install gulp -g

  嗯。。。静静的等待下载完毕。

  安装完毕后,输入下面命令检查是否安装成功,和版本号

gulp -v

   2.目录结构:

  └── src/            源码目录

  ├── build/   .html 组件
  ├── sass/     .scss .sass 文件
  ├── css/       .css 文件
  ├── js/         .js 文件
  └── img/     图片

  └── dist/        输出目录
  └── package.json  
  └── gulpfile.js

  !!!package.json是用来干嘛的?

  每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

  如果想更深入了解的话可以去看看:http://javascript.ruanyifeng.com/nodejs/packagejson.html#toc0

  如果是别人已经开发中的项目,想同步下载所有插件只需要用下面这行代码就可以解决!!

cnpm install

  就可以自动安装所有声明的插件模块

  !!!gulpfile.js是干嘛的呢?(这个需要自己手动创建在根目录下!!!!这个需要自己手动创建在根目录下!!!!这个需要自己手动创建在根目录下!!!!

  用来管理文件输出的位置和用什么工具进行压缩或者优化(个人理解)

  接下来我们需要给安装项目目录安装Gulp:

npm install gulp --save-dev

  —save-dev 这个参数会将插件信息自动更新到 package.json 里,其中的 devDependencies 属性会随插件依赖的安装卸载而改变。

  这个操作会在项目目录下自动生成node_modules 文件夹,相应的插件都在其中。

  兄弟,买挂吗?这里有,让你敲代码比复制粘贴还快:http://www.gulpjs.com.cn/docs/api/(API文档)

  当然,吹牛的反正不要钱~

  好了接下来就是具体的写法和实例:

  1 /*!
  2  * gulp
  3  * $ npm install gulp gulp-ruby-sass gulp-cached gulp-uglify gulp-rename gulp-concat gulp-notify gulp-filter gulp-jshint gulp-rev-append gulp-cssnano gulp-imagemin browser-sync gulp-file-include gulp-autoprefixer del --save-dev
  4  */
  5  //如果引入不成功的话,可以:插件名 -v 查询下是否安装成功
  6 // Load plugins
  7 var gulp = require('gulp'), // 必须先引入gulp插件
  8     del = require('del'),  // 文件删除
  9     sass = require('gulp-ruby-sass'), // sass 编译
 10     cached = require('gulp-cached'), // 缓存当前任务中的文件,只让已修改的文件通过管道
 11     uglify = require('gulp-uglify'), // js 压缩
 12     rename = require('gulp-rename'), // 重命名
 13     concat = require('gulp-concat'), // 合并文件
 14     notify = require('gulp-notify'), // 相当于 console.log()
 15     filter = require('gulp-filter'), // 过滤筛选指定文件
 16     jshint = require('gulp-jshint'), // js 语法校验
 17     rev = require('gulp-rev-append'), // 插入文件指纹(MD5)
 18     cssnano = require('gulp-cssnano'), // CSS 压缩
 19     imagemin = require('gulp-imagemin'), // 图片优化
 20     browserSync = require('browser-sync'), // 保存自动刷新
 21     fileinclude = require('gulp-file-include'), // 可以 include html 文件
 22     autoprefixer = require('gulp-autoprefixer'); // 添加 CSS 浏览器前缀
 23  
 24 // sass
 25 gulp.task('sass', function() {
 26   return sass('src/sass/**/*.scss', {style: 'expanded'})  // 传入 sass 目录及子目录下的所有 .scss 文件生成文件流通过管道并设置输出格式
 27     .pipe(cached('sass'))  // 缓存传入文件,只让已修改的文件通过管道(第一次执行是全部通过,因为还没有记录缓存)
 28     .pipe(autoprefixer('last 6 version')) // 添加 CSS 浏览器前缀,兼容最新的5个版本
 29     .pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下(不影响此时管道里的文件流)
 30     .pipe(rename({suffix: '.min'})) // 对管道里的文件流添加 .min 的重命名
 31     .pipe(cssnano()) // 压缩 CSS
 32     .pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下,此时每个文件都有压缩(*.min.css)和未压缩(*.css)两个版本
 33 });
 34  
 35 // css (拷贝 *.min.css,常规 CSS 则输出压缩与未压缩两个版本)
 36 gulp.task('css', function() {
 37   return gulp.src('src/css/**/*.css')
 38     .pipe(cached('css'))
 39     .pipe(gulp.dest('dist/css')) // 把管道里的所有文件输出到 dist/css 目录
 40     .pipe(filter(['**/*', '!**/*.min.css'])) // 筛选出管道中的非 *.min.css 文件
 41     .pipe(autoprefixer('last 6 version'))
 42     .pipe(gulp.dest('dist/css')) // 把处理过的 css 输出到 dist/css 目录
 43     .pipe(rename({suffix: '.min'}))
 44     .pipe(cssnano())
 45     .pipe(gulp.dest('dist/css'))
 46 });
 47  
 48 // styleReload (结合 watch 任务,无刷新CSS注入)
 49 gulp.task('styleReload', ['sass', 'css'], function() {
 50   return gulp.src(['dist/css/**/*.css'])
 51     .pipe(cached('style'))
 52     .pipe(browserSync.reload({stream: true})); // 使用无刷新 browserSync 注入 CSS
 53 });
 54  
 55 // script (拷贝 *.min.js,常规 js 则输出压缩与未压缩两个版本)
 56 gulp.task('script', function() {
 57   return gulp.src(['src/js/**/*.js'])
 58     .pipe(cached('script'))
 59     .pipe(gulp.dest('dist/js'))
 60     .pipe(filter(['**/*', '!**/*.min.js'])) // 筛选出管道中的非 *.min.js 文件
 61     // .pipe(jshint('.jshintrc')) // js的校验与合并,根据需要开启
 62     // .pipe(jshint.reporter('default'))
 63     // .pipe(concat('main.js'))
 64     // .pipe(gulp.dest('dist/js'))
 65     .pipe(rename({suffix: '.min'}))
 66     .pipe(uglify())
 67     .pipe(gulp.dest('dist/js'))
 68 });
 69  
 70 // image
 71 gulp.task('image', function() {
 72   return gulp.src('src/img/**/*.{jpg,jpeg,png,gif}')
 73     .pipe(cached('image'))
 74     .pipe(imagemin({optimizationLevel: 3, progressive: true, interlaced: true, multipass: true}))
 75     // 取值范围:0-7(优化等级),是否无损压缩jpg图片,是否隔行扫描gif进行渲染,是否多次优化svg直到完全优化
 76     .pipe(gulp.dest('dist/img'))
 77 });
 78  
 79 // html 编译 html 文件并复制字体
 80 gulp.task('html', function () {
 81   return gulp.src('src/*.html')
 82     .pipe(fileinclude()) // include html
 83     .pipe(rev()) // 生成并插入 MD5
 84     .pipe(gulp.dest('dist/'))
 85 });
 86  
 87 // clean 清空 dist 目录
 88 gulp.task('clean', function() {
 89   return del('dist/**/*');
 90 });
 91  
 92 // build,关连执行全部编译任务
 93 gulp.task('build', ['sass', 'css', 'script', 'image'], function () {
 94   gulp.start('html');
 95 });
 96  
 97 // default 默认任务,依赖清空任务
 98 gulp.task('default', ['clean'], function() {
 99   gulp.start('build');
100 });
101  
102 // watch 开启本地服务器并监听
103 gulp.task('watch', function() {
104   browserSync.init({
105     server: {
106       baseDir: 'dist' // 在 dist 目录下启动本地服务器环境,自动启动默认浏览器
107     }
108   });
109  
110   // 监控 SASS 文件,有变动则执行CSS注入
111   gulp.watch('src/sass/**/*.scss', ['styleReload']);
112   // 监控 CSS 文件,有变动则执行CSS注入
113   gulp.watch('src/css/**/*.css', ['styleReload']);
114   // 监控 js 文件,有变动则执行 script 任务
115   gulp.watch('src/js/**/*.js', ['script']);
116   // 监控图片文件,有变动则执行 image 任务
117   gulp.watch('src/img/**/*', ['image']);
118   // 监控 html 文件,有变动则执行 html 任务
119   gulp.watch('src/**/*.html', ['html']);
120   // 监控 dist 目录下除 css 目录以外的变动(如js,图片等),则自动刷新页面
121   gulp.watch(['dist/**/*', '!dist/css/**/*']).on('change', browserSync.reload);
122  
123 });

猜你喜欢

转载自www.cnblogs.com/xhh-xjj/p/8920663.html