简介:

gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。

gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。

ok开始说一些学习步骤:

安装nodejs -> 全局安装gulp -> 项目安装gulp以及gulp插件 -> 配置gulpfile.js -> 运行任务

1、

说明:gulp是基于nodejs,理所当然需要安装nodejs;

安装:打开nodejs官网,点击硕大的绿色Download按钮,它会根据系统信息选择对应版本(.msi文件)。然后像安装QQ一样安装它就可以了(安装路径随意)。

2、

简单介绍gulp在使用过程中常用命令,打开命令提示符执行下列命令(打开方式:window + r 输入cmd回车):

node -v查看安装的nodejs版本,出现版本号,说明刚刚已正确安装nodejs。PS:未能出现版本号,请尝试注销电脑重试;

npm -v查看npm的版本号,npm是在安装nodejs时一同安装的nodejs包管理器,那它有什么用呢?

cd定位到目录,用法:cd + 路径 ;

dir列出文件列表;

cls清空命令提示符窗口内容。

3、npm介绍

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

使用npm安装插件:命令提示符执行npm install <name> [-g] [--save-dev]

  a、<name>:node插件名称。例:npm install gulp-less --save-dev

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

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

  d、-dev:保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点;一般保存在dependencies的像这些express/ejs/body-parser等等。

  e、为什么要保存至package.json?因为node插件包相对来说非常庞大,所以不加入版本管理,将配置信息写入package.json并将其加入版本管理,其他开发者对应下载即可(命令提示符执行npm install,则会根据package.json下载所有需要的包,npm install --production只下载dependencies节点的包)。

  f、使用npm卸载插件:npm uninstall <name> [-g] [--save-dev]  PS:不要直接删除本地插件包

  g、删除全部插件:npm uninstall gulp-less gulp-uglify gulp-concat ……???太麻烦

  h、借助rimraf:npm install rimraf -g 用法:rimraf node_modules

  i、使用npm更新插件:npm update <name> [-g] [--save-dev]

  j、更新全部插件:npm update [--save-dev]

  k、查看npm帮助:npm help

  l、当前目录已安装插件:npm list

4、cnmp

npm安装插件过程:从http://registry.npmjs.org下载对应的插件包(该网站服务器位于国外,所以经常下载缓慢或出现异常),淘宝团队为我们解决了这个问题,

http://npm.taobao.org这是一个完整 npmjs.org 镜像,可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。

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

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

5、全局安装gulp

  a、说明:全局安装gulp目的是为了通过她执行gulp任务;

  b、安装:命令提示符执行cnpm install gulp -g

  c、查看是否正确安装:命令提示符执行gulp -v,出现版本号即为正确安装。

6、新建package.json文件

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

  b、它是这样一个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"
}
}

当然我们可以手动新建这个配置文件,但是作为一名有志青年,我们应该使用更为效率的方法:命令提示符执行cnpm init

查看package.json帮助文档,命令提示符执行cnpm help package.json

接下来直接来点干的

操作之前先了解下面这几个单词或者说是方法

gulp.task(name, fn) 建立任务
gulp.run(tasks...) 尽可能多的并行运行多个task
gulp.watch(glob, fn) 当glob内容发生改变时,执行fn
gulp.src(glob) 返回一个可读的stream
gulp.dest(glob) 返回一个可写的stream
pipe(管道符) 管道操作

项目开始,先建一个目录resume

然后之前提到的方法在地址栏双击输入cmd进入命令行安装一系列插件

首先就是安装淘宝镜像:npm install -g cnpm --registry=https://registry.npm.taobao.org

接着依次安装运行以下命令
cnpm install gulp --save-dev
cnpm install gulp-htmlmin --save-dev
cnpm install gulp-imagemin --save-dev
cnpm install gulp-minify-css --save-dev
cnpm install gulp-rename --save-dev
cnpm install gulp-rev --save-dev
cnpm install gulp-rev-collector --save-dev
cnpm install gulp-sass --save-dev
cnpm install gulp-uglify --save-dev
cnpm install gulp-watch --save-dev
cnpm install gulp-watch-sequence --save-dev
cnpm install gulp-webserver --save-dev

安装完以后文件夹里面就会多出一些文件如下图:

接下来就是新建gulpfile.js文件了,找了以下网上的简单介绍:

说明:gulpfile.js是gulp项目的配置文件,是位于项目根目录的普通js文件(其实将gulpfile.js放入其他文件夹下亦可)。

它大概是这样一个js文件:

 //导入工具包 require('node_modules里对应模块')
var gulp = require('gulp'), //本地安装gulp所用到的地方
less = require('gulp-less'); //定义一个testLess任务(自定义任务名称)
gulp.task('testLess', function () {
gulp.src('src/less/index.less') //该任务针对的文件
.pipe(less()) //该任务调用的模块
.pipe(gulp.dest('src/css')); //将会在src/css下生成index.css
}); gulp.task('default',['testLess', 'elseTask']); //定义默认任务 elseTask为其他任务,该示例没有定义elseTask任务 //gulp.task(name[, deps], fn) 定义任务 name:任务名称 deps:依赖任务名称 fn:回调函数
//gulp.src(globs[, options]) 执行任务处理的文件 globs:处理的文件路径(字符串或者字符串数组)
//gulp.dest(path[, options]) 处理完后文件生成路径

然后是自己新建的gulpfile.js文件:

 // 基础gulp模块
var gulp = require('gulp');
// webserver服务器模块
var webserver = require('gulp-webserver'); //mock数据操作,需要引入url及fs,但是url/fs是内置的,所以不需要安装
var url = require('url');
var fs = require('fs'); // fs -> filesystem // sass转化
var sass = require('gulp-sass'); //js的模块化打包操作
var webpack = require('gulp-webpack'); //命名模块
var named = require('vinyl-named');
// cnpm install vinyl-named --save-dev var uglify = require('gulp-uglify'); var minifyCss = require('gulp-minify-css');
// cnpm install gulp-minify-css --save-dev //版本管理
var rev = require('gulp-rev');
//版本控制
var revCollector = require('gulp-rev-collector');
//监控
var watch = require('gulp-watch');
//队列模块
var sequence = require('gulp-watch-sequence'); /*
1.创建src(src是开发目录,所有操作都在src中进行)目录
2.在src新建index.html(因为我们现在做的是spa项目,所以,通过只有一个入口主文件)
3.实现index.html的文件复制操作,复制的目标是www
4.webserver的本地服务器配置(不是gulp-connect)
5.实现mock数据操作,先在根目录下创建mock目录,然后在目录里放置对应的json文件
mock文件有skill.json/project.json/work.json,对应的接口地址配置为/api/skill,/api/project,/api/work
6.实现sass转换
7.实现js的模块化开发操作
*/ gulp.task('copy-index',function(){
return gulp.src('./src/index.html')
.pipe(gulp.dest('./www'));
}); //创建本地服务器任务
gulp.task('webserver', function() {
gulp.src('./www')
.pipe(webserver({
livereload: true,
//directoryListing:true,
open:true,
port:1234, middleware:function(req,res,next){
//获取浏览器中的url,将url进行解析操作
var urlObj = url.parse(req.url,true),
method = req.method; //如果url里输出了/skill.php,/project.php或者是/work,
//那么我们就可以查找到urlObj.pathname为/skill.php,/project.php,/work
//然后我们就可以通过这个变化的url地址内容去判断并且返回相应的
//skill.json/project.json/work.json等数据文件的内容
switch(urlObj.pathname){
case '/skill':
// Content-Type可以指定返回的文件的格式类型
res.setHeader('Content-Type','application/json');
//需要通过fileSystem文件操作函数,去读取指定目录下的json文件,并将读取到的内容返回到浏览器端
fs.readFile('./mock/skill.json','utf-8',function(err,data){
res.end(data);
}); return; case '/project':
res.setHeader('Content-Type','application/json');
fs.readFile('./mock/project.json','utf-8',function(err,data){
res.end(data);
});
return; case '/work':
res.setHeader('Content-Type','application/json');
fs.readFile('./mock/work.json','utf-8',function(err,data){
res.end(data);
});
return;
} next(); // next是实现的循环
} // end middleware })); // end gulp
}); // index.css/main.scss--->www/css/index.css
// 通常我们主有一个入口的主文件index.scss/index.css
// @import 'xxx' gulp.task('sass',function(){
return gulp.src('./src/styles/index.scss')
.pipe(sass())
.pipe(minifyCss()) //css 压缩
.pipe(gulp.dest('./www/css'));
}) gulp.task('packjs',function(){
return gulp.src('./src/scripts/index.js')
.pipe(named())
.pipe(webpack())
.pipe(uglify()) // js丑化压缩
.pipe(gulp.dest('./www/js'));
}) //版本管理操作 var cssDistFiles = ['./www/css/index.css'];
var jsDistFiles = ['./www/js/index.js']; gulp.task('verCss',function(){
//找到要进行版本控制操作的目标文件
return gulp.src(cssDistFiles)
//生成相应的版本
.pipe(rev())
//复制到指定的目录
.pipe(gulp.dest('./www/css'))
//生成相应的映射文件
.pipe(rev.manifest())
//将映射文件复制到指定的目录
.pipe(gulp.dest('./www/ver/css'))
}) gulp.task('verJs',function(){
//找到要进行版本控制操作的目标文件
return gulp.src(jsDistFiles)
//生成相应的版本
.pipe(rev())
//复制到指定的目录
.pipe(gulp.dest('./www/js'))
//生成相应的映射文件
.pipe(rev.manifest())
//将映射文件复制到指定的目录
.pipe(gulp.dest('./www/ver/js'))
}) //文件的字符串替换操作
gulp.task('html',function(){
//src第一个参数是我们的映射资源文件,第二个参数是我们需要替换的html文件
gulp.src(['./www/ver/**/*.json','./www/*.html'])
//进行字符串替换操作
.pipe(revCollector({
replaceReved:true
}))
//复制文件到指定目录
.pipe(gulp.dest('./www'))
}) //监听操作
gulp.task('watch',function(){
gulp.watch('./src/index.html',['copy-index']); //设置队列
var queue = sequence(300);
watch('./src/scripts/**',{
name:"JS",
emitOnGlob:false
}, queue.getHandler('packjs','verJs','html')); watch('./src/styles/**',{
name:"CSS",
emitOnGlob:false
}, queue.getHandler('sass','verCss','html')); }); gulp.task('default',['webserver','watch'])

直接新建一个文件把上面的内容写进去就ok了,就是这样:

接下来就是新建一个src目录在里面做一些基本的文件配置:

上面是javascript里面放的,接下来就是样式里面创建的:

详细操作这里有视屏:js_data\第三阶段\视屏\day10(视屏里这一块的内容靠后)

类库所在地址js_data\第三阶段\课件\day07(iscroll类库和swiper类库)

准备工作差不多了,全部安装完成以后就运行gulp试试,可能会遇到以下问题:

还可能遇到下面的错误:

接下来就是最大的问题了:

解决办法:

还有一个小问题忘了,实在不行就ctr+c终端命令重启试试

这里就主要说一些问题,具体的东西视屏里面有,就不浪费时间了。

打开package.json就会看到如下代码(上面对package.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"
}
}

接下来在gulpBase文件夹中打开cmd命令行,并敲入命令npm init:

输入完文件名以后就一路敲回车(会出现一长串很长的代码):

补充:

1、*.scss :*号匹配当前目录任意文件,所以这里的*scss匹配当前目录下所有scss文件。

2、**/*.scss:匹配当前目录及其子目录的所有scss文件。

3、!not-me.scss:!号移除匹配的文件,这里将移除not-me.scss

4、*.+(scss|sass):+号后面会跟着圆括号,里面的元素用|分割,匹配多个选项,这里将匹配scss和sass文件。

gulp(一)的更多相关文章

  1. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  2. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  3. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  4. 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)

    前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...

  5. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  6. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  7. 前端自动化构建工具gulp记录

    一.安装 1)安装nodejs 通过nodejs的npm安装gulp,插件也可以通过npm安装.windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令 ...

  8. gulp初学

    原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js  配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...

  9. gulp批量打包文件并提取公共文件

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. browseriyf是模块化打包工具. 一般情况下,Browserify 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...

  10. 使用gulp解决RequireJS项目前端缓存问题(二)

    1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...

随机推荐

  1. python【6】-函数式编程

    一.高阶函数 map,reduce 1.map() 函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. def f(x): retur ...

  2. 基于注解的Spring AOP示例

    基于注解的Spring AOP示例 目录 在XML配置文件中开启 @AspectJ 支持 声明切面及切入点 声明通知 测试 结语 在XML配置文件中开启 @AspectJ 支持 要使用Spring的A ...

  3. hadoop3.0 alpha1 安装配置

    1. 官网下载 wget  http://apache.fayea.com/hadoop/common/hadoop-3.0.0-alpha1/hadoop-3.0.0-alpha1.tar.gz 2 ...

  4. Scala HandBook

    目录[-] 1.   Scala有多cool 1.1.     速度! 1.2.     易用的数据结构 1.3.     OOP+FP 1.4.     动态+静态 1.5.     DSL 1.6 ...

  5. cacti结合nagios

    使用系统ubuntu12.0.45 监控软件,cacti 使用的是源码安装系统自带的版本过低需要添加插件 nagios采用的系统自带版本 安装nagios apt-get install nagios ...

  6. Java条件语句练习

    /*System.out.println("请输入三个数字:");//输入三个数字,返回最大的那个. int a,b,c,big; Scanner d = new Scanner( ...

  7. IOS Core Animation Advanced Techniques的学习笔记(四)

    第五章:Transforms   Affine Transforms   CGAffineTransform是二维的     Creating a CGAffineTransform   主要有三种变 ...

  8. CentOS 静态IP设置

    一.CentOS 修改IP地址修改对应网卡的IP地址的配置文件 # vi /etc/sysconfig/network-scripts/ifcfg-eth0   电信 # vi /etc/syscon ...

  9. Linux学习 :中断处理机制 & poll机制

    中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务 的程序中去,服务完毕后再返回去继续运行被暂时中断的程序 ...

  10. JavaScript中style, currentStyle和 getComputedStyle的异同

    今天在做项目的时候,习惯性的用到了element.style.width,然而浏览器却报错,错误提示是style is undefined,这是我才意识到,内联样式表和外联样式表在js应用中也有很大的 ...