day34 gulp
1. Gulp简介
- gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。
- gulp是基于Nodejs的自动任务运行器,她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。
- gulp 和grunt 非常类似,但相比于 grunt 的频繁 IO 操作,gulp 的流操作,能更快地更便捷地完成构建工作。
2. Gulp环境搭建
1)安装nodeJs
- 说明:gulp是基于nodejs,理所当然需要安装nodejs
- 安装:打开nodejs官网(https://nodejs.org/en/),点击硕大的绿色Download按钮,它会根据系统信息选择对应版本(.msi文件)
- 测试:按window + r 输入cmd回车,然后输入npm -v
- 确保已经配置到了环境变量, 这样你就可以在全局范围内去使用它了
- 如果想了解环境变量:进入以下地址:https://blog.csdn.net/jiang77...
npm的解释:
- npm是Node.js的包管理工具(package manager)
- 在Node.js上开发时,会用到很多别人写的JavaScript代码。如果需要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。
- 更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。
2)安装 cnpm
- 因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常;
- 如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事。网址:http://npm.taobao.org
安装:
cmd(命令行) 执行:
- npm install cnpm -g --registry=https://registry.npm.taobao.org
- cnpm -v 测试是否安装成功
- 注意:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm(以下操作将以cnpm代替npm)
3) 全局安装gulp
- cmd命令: cnpm install gulp -g
- gulp -v, 出现版本号即为正确安装
- 全局安装gulp的目的是:可以使用gulp命令(就跟使用npm的命令一样)
4) gulp在项目中如何使用 (新项目的步骤)
1. 新建package.json配置文件(初始化一个项目)
- cmd命令: cnpm init
- 一路回车,就会在项目的文件夹下产生一个package.json文件
2. 本地安装gulp(在项目目录下安装gulp)
此步骤的目的是:把gulp里的所有的js文件从服务器上下载到项目目录下;
- 在本目录下cmd(命令行)执行: cnpm install gulp --save-dev
- 安装完成后,就会在项目目录下产生一个node_modules文件
3. 使用gulp
在项目根目录下创建 gulpfile.js
- 在这个js文件中写上js代码,就可以使用。
- gulp.task("任务名称",回调函数);
gulp.src("源文件路径");
- gulp.src() 是读取将要处理的文件,即源文件
gulp.dest("目的路径");
- gulp.dest() 是处理后的文件的路径,即目的文件
pipe(操作);
- pipe() 管道,是如何处理该文件(如:sass编译,复制文件,压缩文件等)
- 原生的gulp有:task src dest watch
原生gulp (4个)
复制文件
const gulp = require("gulp");
// gulp原生方法
// gulp.task("任务名称",回调函数)
gulp.task("_copy",function(){
gulp.src("2fs.txt").pipe(gulp.dest("d:/dest"));
});
// cmd命令行: gulp 任务名, 如gulp _copy
结果:d:/dest下有了2fs.txt文件,说明复制成功了。
批量操作:
//目录js下的所有目录
// 注意该方法只会赋值js文件夹下的所有文件和文件夹,本身的js文件夹没有赋值
gulp.src("js/**/*").pipe(gulp.dest("d:/dest"));
//把项目目录下的所有文件都进行拷贝 (包括子文件夹,不管有多少级)
//注意:该方法仍然不会复制该项目文件夹,只会复制项目下的文件和文件夹
gulp.src("./**/*").pipe(gulp.dest("d:/dest"));
项目:day34
复制后:
监听文件 watch
gulp.watch("监听的文件",回调函数);
gulp.task("_watch",function(){
gulp.watch("2fs.txt",function(){
gulp.src("2fs.txt").pipe(gulp.dest("d:/dest"));
});
});
本地安装gulp插件
npm install moduleName
- 安装模块到项目目录下
npm install -g moduleName
- g 的意思是将模块安装到全局,具体安装到磁盘哪个位置,要看 npm config prefix 的位置。
npm install -save moduleName
- -save 的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖。
npm install -save-dev moduleName
- -save-dev 的意思是将模块安装到项目目录下,并在package文件的devDependencies节点写入依赖。
gulp本身只做一些文件的拷贝,监视等等,但是它提供了很多的接口,由插件完成更多对应的任务,如:js文件的编译,合并文件,压缩文件,优化图片的尺寸,创建本地的开发服务器。下面先介绍常用的,更多的可以找gulp的插件。
合并文件
cmd命令: cnpm install gulp-concat --save-dev
const gulp_concat = require('gulp-concat');
gulp.task("_concat",function(){
gulp.src(["js/a.js","js/b.js"]).pipe(gulp_concat("tools.js")).pipe(gulp.dest("d:/dest"));
});
压缩文件
cmd命令:cnpm install gulp-uglify --save-dev
const gulp_uglify = require('gulp-uglify');
gulp.task("_ugly",function(){
gulp.src("tools.js").pipe(gulp_uglify()).pipe(gulp.dest("d:/dest"));
});
压缩图片
cmd 命令: cnpm install gulp-imagemin --save-dev
const gulp_imgmin = require('gulp-imagemin');
// 压缩图片 cnpm install gulp-imagemin --save-dev
gulp.task("_imgMin",function(){
gulp.src("img/**/*").pipe(gulp_imgmin()).pipe(gulp.dest("d:/dest"));
});
压缩css
cmd命令:cnpm install gulp-minify-css --save-dev
const gulp_minCss = require('gulp-minify-css');
// 压缩CSS
gulp.task("_minCss",function(){
gulp.src("css/test.css").pipe(gulp_minCss()).pipe(gulp.dest("d:/dest"));
});
重命名
cmd命令:cnpm install gulp-rename --save-dev
const gulp_rename = require('gulp-rename');
//合并 压缩 重命名 拷贝
gulp.task("_rename",function(){ gulp.src(["js/a.js","js/b.js"]).pipe(gulp_concat("tools.js")).pipe(gulp_uglify()).pipe(gulp_rename("tools.min.js")).pipe(gulp.dest("d:/dest"));
});
ES6转ES5
cnpm install --save-dev babel-preset-es2015
cnpm install --save-dev gulp-babel@7 babel-core babel-preset-env
const gulp_babel = require('gulp-babel');
gulp.task("_babel",function(){
gulp.src("MF.js").pipe(gulp_babel({presets: ['es2015']})).pipe(gulp.dest("d:/dest"));
});
正在进行的项目如何用gulp:
- 新建空文件夹作为项目的文件夹(不要用gulp作为项目文件夹)
- 用npm初始化项目:用npm ini命令产生package.json文件(第五步)
- 本地安装gulp
- 把项目目前的所有文件拷贝的到新建的项目文件夹里
- 在项目根目录下写gulpfile.js的代码
简化版:
使用步骤
1.下载全局gulp命令 cnpm install gulp -g
2.cnpm init 创建配置文件
3.下载gulp 模块 cnpm install gulp --save-dev
4.在项目根目录下创建 gulpfile.js