Gulp安装及使用
測试环境
- Mac:10.10.4
- Gulp:3.9.0
时间:2015年08月15日18:07:08
安装Gulp
sudo npm install --global gulp
npm install --save-dev gulp
输入gulp -v,显示版本号说明成功安装
使用Gulp
在项目根文件夹创建gulpfile.js文件
var gulp = require('gulp');//引用gulp
gulp.task('default', function() {//创建一个task任务
// place code for your default task here
});
在终端进入gulpfils.js所在文件夹.
运行gulp,他会默认运行default,假设没有defaulttask的话,会报错;也能够gulp default
总体文件结构
root
|----gulpfils.js
|----app
|----hello.txt
|----new
|----world.txt
src/dest
gulp.src:文件源
gulp.dest:目标文件路径
将文件从文件源传送到目的地,能够说是复制,由于源文件还在。
app文件夹
app
|----hello.txt
|----new
|----world.txt
gulp.task('default',function(){
gulp.src('app/hello.txt')
.pipe(gulp.dest('core'));//终于文件路径`core/hello.txt`
});
gulp.task('default',function(){
gulp.src('app/hello.txt')
.pipe(gulp.dest('core/hello.txt'));//终于文件路径`core/hello.txt/hello.txt`
});
处理多个文件
gulp.task('default',function(){
gulp.src('app/**')
.pipe(gulp.dest('core'));
});
运行之后,core文件夹
core
|----hello.txt
|----new
|----world.txt
以下src具体解释引自无双
*能匹配a.js,x.y,abc,abc/,但不能匹配a/b.js*.*能匹配a.js,style.css,a.b,x.y*/*/*.js能匹配a/b/c.js,x/y/z.js,不能匹配a/b.js,a/b/c/d.js**能匹配abc,a/b.js,a/b/c.js,x/y/z,x/y/z/a.b,能用来匹配全部的文件夹和文件**/*.js能匹配foo.js,a/foo.js,a/b/foo.js,a/b/c/foo.jsa/**/z能匹配a/z,a/b/z,a/b/c/z,a/d/g/h/j/k/za/**b/z能匹配a/b/z,a/sb/z,但不能匹配a/x/sb/z,由于仅仅有单**单独出现才干匹配多级文件夹?.js能匹配a.js,b.js,c.jsa??能匹配a.b,abc,但不能匹配ab/,由于它不会匹配路径分隔符[xyz].js仅仅能匹配x.js,y.js,z.js,不会匹配xy.js,xyz.js等,整个中括号仅仅代表一个字符[^xyz].js能匹配a.js,b.js,c.js等,不能匹配x.js,y.js,z.js
当有多种匹配模式时能够使用数组
//使用数组的方式来匹配多种文件
gulp.src(['js/*.js','css/*.css','*.html'])
使用数组的方式另一个优点就是能够非常方便的使用排除模式,在数组中的单个匹配模式前加上!即是排除模式。它会在匹配的结果中排除这个匹配。要注意一点的是不能在数组中的第一个元素中使用排除模式
gulp.src(['*.js','!b*.js']) //匹配全部js文件,但排除掉以b开头的js文件
gulp.src(['!b*.js','*.js']) //不会排除不论什么文件,由于排除模式不能出如今数组的第一个元素中
log输出
console.log("my log");
exec运行命令行
var exec = require('child_process').exec;
gulp.task('default', function() {
exec('mkdir mygulp');
});
运行gulp,就能够看到当前文件夹下创建了一个mygulp文件。
假设你想要回调。能够这样
exec('rm -R mygulpfile',function (error, stdout, stderr){
if (error !== null) {
console.log("error: " + error);
}else{
console.log("ok");
}
});
运行gulp传入參数\接收參数
var gulp = require('gulp'),
argv = require('yargs').argv;
gulp.task('hello_task',function(){
if(argv.test) {
var info = argv.test;
console.log('收到的參数:'+info);
} else {
console.log('输入错误 请输入 gulp hello_task --test hellotest');
}
});
注:运行yargs的时候可能会出错,依照终端的提示操作就可以。
watch
监听文件变化
这里监听app/hello.txt为例
gulp.task('watch', function () {
gulp.watch('app/hello.txt',function(file){
console.log(file.type); //变化类型 added为新增,deleted为删除。changed为改变
console.log(file.path); //变化的文件的路径
});
});
运行gulp watch。
在hello.txt加入一行hi World
终端输出
[15:43:16] Using gulpfile ~/root/gulpfile.js
[15:43:16] Starting 'watch'...
[15:43:16] Finished 'watch' after 10 ms
changed //改动了文件
~/root/app/hello.txt //文件路径
插件使用
比方说。app文件夹以下,将全部文件中的helloWorld替换为helloChina.
这里使用的是gulp-replace插件,怎么使用,官网有具体文档
安装gulp-replace:运行npm install --save-dev gulp-replace,须要权限的话。在前面加上sudo.
var gulp = require('gulp'),
replace = require('gulp-replace');
gulp.task('replace_code',function(){
gulp.src('app/**')
.pipe(replace("helloWorld","helloChina"))
.pipe(gulp.dest('app'))
}
);
合并task运行
此时假设有两个task,分别为’task1’、’task2’,运行一个命令。将他俩都运行
gulp.task('task3', ['task1','task2']);
或
gulp.task('task3', ['task1','task2'],function(){
//coding
});
在终端输入gulp task3,task1和task2都会运行
多个task按顺序运行
这里以运行one后才干运行two为例
採用callback
var gulp = require('gulp');
// takes in a callback so the engine knows when it'll be done
gulp.task('one', function(cb) {
console.log('開始运行one');
// 延时
setTimeout(function(){
console.log('运行oneOk');
cb();
}, 2000);
});
// identifies a dependent task must be complete before this one begins
gulp.task('two', ['one'], function() {
// task 'one' is done now
console.log('開始运行two');
});
运行gulp two返回结果
➜ Shadowsocks git:(master) ✗ gulp two
[13:15:05] Using gulpfile ~/Shadowsocks/gulpfile.js
[13:15:05] Starting 'one'...
開始运行one
运行oneOk
[13:15:07] Finished 'one' after 2 s
[13:15:07] Starting 'two'...
開始运行two
[13:15:07] Finished 'two' after 99 μs
➜ Shadowsocks git:(master) ✗
返回stream
var gulp = require('gulp');
gulp.task('one', function(cb) {
console.log('開始运行one');
// 处理文件
var stream = gulp.src('gulp/**')
.pipe(gulp.dest('build'));
console.log('运行oneOk');
return stream;
});
gulp.task('two', ['one'], function() {
// task 'one' is done now
console.log('開始运行two');
});
运行gulp two返回结果
➜ Shadowsocks git:(master) ✗ gulp two
[13:19:27] Using gulpfile ~/Shadowsocks/gulpfile.js
[13:19:27] Starting 'one'...
開始运行one
运行oneOk
[13:19:44] Finished 'one' after 17 s
[13:19:44] Starting 'two'...
開始运行two
[13:19:44] Finished 'two' after 183 μs
➜ Shadowsocks git:(master) ✗
返回promise
假设没有q的话,运行sudo npm install q
var gulp = require('gulp');
var Q = require('q');
gulp.task('one', function() {
console.log('開始运行one');
var deferred = Q.defer();
// do async stuff
setTimeout(function() {
console.log('运行oneOk');
deferred.resolve();
}, 2000);
return deferred.promise;
});
// identifies a dependent task must be complete before this one begins
gulp.task('two', ['one'], function() {
// task 'one' is done now
console.log('開始运行two');
});
运行gulp two返回结果
➜ Shadowsocks git:(master) ✗ gulp two
[13:47:56] Using gulpfile ~/Shadowsocks/gulpfile.js
[13:47:56] Starting 'one'...
開始运行one
运行oneOk
[13:47:58] Finished 'one' after 2 s
[13:47:58] Starting 'two'...
開始运行two
[13:47:58] Finished 'two' after 67 μs
➜ Shadowsocks git:(master) ✗
附:假设在上述三种方法中,均加入gulp.task('default', ['one', 'two']);,运行gulp,效果也是一样的.
注意事项
gulp-replace替换文本注意点
将项目project中全部文件中的
helloWorld替换成helloChina
gulp.src('app/**')
.pipe(replace("helloWorld","helloChina"))
.pipe(gulp.dest('app'))
假设项目中有不能被编辑器编辑的文件,像.jar、.png、.jpg等,运行上述代码后。整个project会运行不了,所以在替换的时候。须要加入限制
这里以一般的Android项目为例,不可被编辑的文件有.jar、.png、.jpg
gulp.src(['app/**','!**/*.jar','!**/*.png','!**/*.png'])
.pipe(replace("helloWorld","helloChina"))
.pipe(gulp.dest('app'))
Gulp个人理解
gulp能够看做是一个传送带,作用仅仅是将文件从A传送(复制)到B,其它的不做。
假设想要完毕文本替换、压缩等功能的话。在传送带上面安装插件。由插件完毕。
推荐插件
-
让gulp任务。能够相互独立。解除任务间的依赖,增强task复用
-
静态文件server,同一时候也支持浏览器自己主动刷新
-
用于获取启动參数。针对不同參数。切换任务运行过程时须要
-
删除文件或文件夹
-
gulp经常使用工具
-
用于文件压缩
參考
Gulp安装及使用的更多相关文章
- Gulp安装及配合组件构建前端开发一体化
原文:http://www.dbpoo.com/getting-started-with-gulp/ 所有功能前提需要安装nodejs(本人安装版本v0.10.26)和ruby(本人安装版本1.9.3 ...
- windows下Gulp入门详细教程 &&gulp安装失败的原因(红色)
以下教程亲自实践可行: 另外添加一个Gulp自动编译.压缩.更新.测试的教程链接:https://markpop.github.io/2014/09/17/Gulp%E5%85%A5%E9%97%A8 ...
- gulp安装和使用简介
一. gulp和grunt对比 grunt目前的工作流程:读文件.修改文件.写文件——读文件.修改文件.写文件——... gulp目前的工作流程:读取文件——修改文件——修改文件...——写文件 二. ...
- Gulp安装使用教程
题记:为什么要使用gulp,网上有很多关于gulp的优势,而在我看来,这些都是工具的优势!工具的优势最主要体现在易用性上,听说gulp比grunt更易用,所以这里写个文档记录. 同样要保证nodejs ...
- Gulp安装流程、使用方法及cmd常用命令导览
Gulp安装流程.使用方法及CMD常用命令导览 来自前端小白的gulp及周边知识学习总结 一.名词介绍: Npm--node包管理工具 一开始我不理解,包管理工具是什么鬼.后来用到的gulp也好,gu ...
- gulp安装及使用流程
1. 安装nodejs 去 https://nodejs.org/en/下载安装文件安装即可. 安装完成后,在终端输入node -v回车打印出nodejs的版本号,说明nodejs安装成功. 在终端输 ...
- gulp安装+一个超简单入门小demo
gulp安装參考.gulp安装參考2. 一.NPM npm是node.js的包管理工具.主要功能是管理.更新.搜索.公布node的包. Gulp是通过npm安装的. 所以首先,须要安装node.js. ...
- Gulp安装及配合组件构建前端开发一体化(转)
Gulp安装及配合组件构建前端开发一体化 所有功能前提需要安装nodejs(本人安装版本v0.10.26)和ruby(本人安装版本1.9.3p484). Gulp 是一款基于任务的设计模式的自动化工具 ...
- gulp安装成功但是无法使用
gulp安装正常,但是查看gulp -v和使用gulp的时候报错, 原因:缺少环境变量或环境变量错误. 查找环境变量的方法:在dos下输入npm config get prefix就会显示一个地址,这 ...
- gulp安装说明
1.安装node-v6.3.0-x64,安装成功后再点击node-v6.3.0-x64卸载(点击remove). 2.安装node-v4.4.7-x64. 3.打开cmd命令行,输入node -v,查 ...
随机推荐
- 按键精灵txt判断
句子 = "度阿斯达娘阿婶是大的百度知道" 词 = "百度知道" MyPos = Instr(句子, 词) If MyPos > 0 Then Tra ...
- CFAN:Coarse-to-Fine Auto-Encoder Networks (CFAN) for Real-Time Face Alignment
作者:嫩芽33出处:http://www.cnblogs.com/nenya33/p/6801045.html 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者同意,必须保留此段声明:必须 ...
- 迅为iTOP-4418/6818开发板MiniLinux下的GPS使用手册
平台:iTOP-4418/6818开发板 系统:MiniLinux 在 Mini Linux 系统环境下 iTOP-4418 和 6818 的 GPS 实验调试步骤.给用户提供了“iTOP-4418- ...
- MySql(一)mysql服务的基本操作及环境配置
MySQL服务的启动开始–>计算机–>右键选择管理–>双击打开服务和应用程序–>双击服务–>找到MySQL的服务名称(我的是MySQL56),右键选择启动即可 通过命令行 ...
- vue项目打包步骤及运行打包项目
(1)项目打包 终端运行命令 npm run build 打包成功的标志与项目的改变,如下图: 点击index.html,通过浏览器运行,出现以下报错,如图: 那么应该如何修改呢? 具体步骤如下 ...
- HR教你面试时怎么谈出高工资
不是任何时候谈钱都会伤感情,比如跟客户谈合同报价,跟房东谈房租,以及面试时和公司HR谈新工作的薪酬待遇. 这事儿一般不需要你先开口.在面试进入尾声的时候,如果HR对你还算满意,通常就会开始问你目前的薪 ...
- centos7下配置tomcat开机启动
配置tomcat的开机启动1> 在centos7的/etc/rc.d/rc.local中加入:(注意自己的路径)#java environment export JAVA_HOME=/usr/j ...
- RNN,LSTM,GRU基本原理的个人理解
记录一下对RNN,LSTM,GRU基本原理(正向过程以及简单的反向过程)的个人理解 RNN Recurrent Neural Networks,循环神经网络 (注意区别于recursive neura ...
- tensorflow 学习笔记-- tf.reduce_max、tf.sequence_mask
1.tf.reduce_max函数的作用:计算张量的各个维度上的元素的最大值.例子: import tensorflow as tfmax_value = tf.reduce_max([1, 3, 2 ...
- HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地
<!DOCTYPE html> <html lang="zh-cmn-Hans"> <meta charset="UTF-8"&g ...