简介

Gulp是一个基于流的自动化构建器。

安装

npm config set registry http://registry.npm.taobao.org  ---最好用国内源
npm install -g gulp
npm install --save-dev gulp

创建文件 gulpfile.js

var gulp = require('gulp');

gulp.task('default', function() {
// place code for your default task here
});

运行

gulp

功能说明

编译Sass (gulp-ruby-sass)
Autoprefixer (gulp-autoprefixer)
缩小化(minify)CSS (gulp-minify-css)
JSHint (gulp-jshint)
拼接 (gulp-concat)
丑化(Uglify) (gulp-uglify)
图片压缩 (gulp-imagemin) --这个插件实际使用中可能会有一些问题
即时重整(LiveReload) (gulp-livereload)
清理档案 (gulp-clean)
图片快取,只有更改过得图片会进行压缩 (gulp-cache)
更动通知 (gulp-notify)

jshint插件基本用法:

var jshint = require('gulp-jshint');
var gulp = require('gulp'); gulp.task('lint', function() {
return gulp.src('./lib/*.js')
.pipe(jshint())
.pipe(jshint.reporter('YOUR_REPORTER_HERE'));
});

比较全的用法:

gulp.task('scripts', function() {
return gulp.src('src/scripts/**/*.js')
.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js'))
.pipe(gulp.dest('dist/assets/js'))
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(gulp.dest('dist/assets/js'))
.pipe(notify({ message: 'Scripts task complete' }));
});

Ionic 项目中使用gulp

之所以单独介绍下Ionic中使用gulp,是因为Ionic本身带了gulp,其脚本在生成的项目ionic目录下。 
原始内容如下:

var gulp = require('gulp');
var gutil = require('gulp-util');
var bower = require('bower');
var concat = require('gulp-concat');
var sass = require('gulp-sass');
var minifyCss = require('gulp-minify-css');
var rename = require('gulp-rename');
var sh = require('shelljs'); var paths = {
sass: ['./scss/**/*.scss']
}; gulp.task('default', ['sass']); gulp.task('sass', function(done) {
gulp.src('./scss/ionic.app.scss')
.pipe(sass({
errLogToConsole: true
}))
.pipe(gulp.dest('./www/css/'))
.pipe(minifyCss({
keepSpecialComments: 0
}))
.pipe(rename({ extname: '.min.css' }))
.pipe(gulp.dest('./www/css/'))
.on('end', done);
}); gulp.task('watch', function() {
gulp.watch(paths.sass, ['sass']);
}); gulp.task('install', ['git-check'], function() {
return bower.commands.install()
.on('log', function(data) {
gutil.log('bower', gutil.colors.cyan(data.id), data.message);
});
}); gulp.task('git-check', function(done) {
if (!sh.which('git')) {
console.log(
' ' + gutil.colors.red('Git is not installed.'),
'\n Git, the version control system, is required to download Ionic.',
'\n Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.',
'\n Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.'
);
process.exit(1);
}
done();
});

首先,在项目加入gulp。下面命令是分开写的,也可以合并一次性安装。

npm install --save-dev gulp
npm install gulp-util --save-dev
npm install brow --save-dev
npm install bower --save-dev
npm install gulp-concat --save-dev
npm install gulp-sass --save-dev
npm install gulp-minify-css --save-dev
npm install gulp-rename --save-dev
npm install shelljs --save-dev
npm install jshint gulp-jshint --save-dev
npm install gulp-uglify --save-dev
npm install gulp-notify --save-dev
npm install gulp-minify-html --save-dev
npm install gulp-imagemin --save-dev
npm install gulp-cache --save-dev
npm install gulp-cond --save-dev
npm install yargs --save-dev
npm install gulp-ng-annotate --save-dev
npm install gulp-clean --save-dev

根据条件判断编译方式

gulp-cond
gulp.src("*.js")
.pipe(cond(is_release, uglify({compress:false})))
.pipe(gulp.dest(target_path+path.js));

gulp-imagemin遇到的一个问题的处理
No path specified! Can not get relative.
需要加一句:

gulp.task('img',function(){
gulp.src(extensArray(['png','jpg','gif']))
.pipe($.filter('*.{jpg,jpeg,svg,gif,png}')) //加这一句
.pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
.pipe(gulp.dest(target_path ));
});

接收命令行参数

gulp.env

gulp --key 111 --value 222

gulp.env的值:

gulp.env: { _: [], key: 111, value: 222 }

gulp.env已经过时,可使用yargs

安装:

npm install yargs --save-dev

使用:

var argv = require('yargs').argv;

gulp.task('my-task', function() {
return gulp.src(argv.a == 1 ? options.SCSS_SOURCE : options.OTHER_SOURCE)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});

判断文件是否存在

var fs = require(‘fs’);

fs.stat(file, function (err, stat) {
if (err != null) {
console.log('输入的参数错误。错误代码:', err.code);
process.exit(0);
} else {
}
});

一些错误处理

Error: Cannot find module 'internal/fs'

处理方法:把提示里的模块卸载重装。

npm remove bower
npm install bower -g
npm install bower --save-dev

简单操作实例:

gulpfile.js

var gulp = require('gulp'); // 引入gulp
var sass = require('gulp-sass'); // 引入gulp-sass,简化css操作
var cleanCss = require('gulp-clean-css'); // 压缩css文件,减小文件大小,并给引用url添加版本号避免缓存
var rename = require('gulp-rename'); // 重命名
var concat = require('gulp-concat'); // 合并
var cssmin = require('gulp-cssmin'); // 压缩css
var uglify = require('gulp-uglify');// js丑化 // 匹配scss文件下的所有.scss文件
var paths = {
sass: ['./scss/**/*.scss']
}; // 默认执行
gulp.task('default', ['sass']); /**
* sass操作任务
* 执行: $ gulp sass
* 效果: 当scss文件夹中的.scss文件变化时,在www/css/目录下生成.css文件
*/
gulp.task('sass', function(done) { // 定义任务
gulp.src('./scss/*.scss') // 找对象
.pipe(sass()) // 调用gulp-sass函数
.on('error', sass.logError) // 报错日志打印
.pipe(gulp.dest('./www/css/')) // 报错日志文件保存路径
.pipe(cleanCss({
keepSpecialComments: 0 // '*'保留所有特殊前缀 当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀
}))
.pipe(rename({ extname: '.min.css' })) // 重命名
.pipe(gulp.dest('./www/css/')) // 生成的css文件保存路径
.on('end', done); // 结束任务
}); /**
* 监控文件变化
* 执行: $ gulp watch
* 效果: 当scss文件夹中的.scss文件变化时,自动执行sass操作任务
*/
gulp.task('watch', ['sass'], function() {
gulp.watch(paths.sass, ['sass']);
}); /**
* js操作
* 执行: $ gulp js
* 效果: 对www/js/路径下的所有.js文件进行压缩混淆处理
*/
gulp.task('js', function(done) { // 定义任务
gulp.src('./www/js/*.js') // 找对象
.pipe(concat('bundle.js')) // 合并
.pipe(gulp.dest('./www/js/')) // 合并后文件保存路径
.pipe(rename({ extname: '.min.js' })) // 重命名
.pipe(uglify()) // js丑化
.pipe(gulp.dest('./www/js/')) // 生成的js压缩文件保存路径
.on('end', done); // 结束任务
}); /**
* 注: 编写.scss文件时,执行 $ gulp 即可,默认执行sass操作
*/

.

  

gulp在ionic中的使用的更多相关文章

  1. Ionic学习笔记三 Gulp在ionic中的使用

    简介 Gulp是一个基于流的自动化构建器. 安装 npm config set registry http://registry.npm.taobao.org ---最好用国内源 npm instal ...

  2. 解决 ionic 中的 CORS(跨域)

    译者注:本人翻译功力有限,所以文中难免有翻译不准确的地方,凑合看吧,牛逼的话你看英文版的去,完事儿欢迎回来指正交流(^_^) 如果你通过 ionic serve 或者 ionic run 命令使用或 ...

  3. gulp使用过程中出现的问题

    在使用gulp的过程中,最容易出现错误的地方就是在安装本地的gulp的时候,错误的原因有: 1.本来是局部安装gulp,但使用命令时还带-g. 2.忘记在局部安装gulp. 以上两种情况出错时会报错, ...

  4. ionic中获取坐标方法

    ionic中获取坐标的方法 1.首相需要执行命令: cordova plugin add cordova-plugin-geolocation2.然后块级注入配置bower文件引入ngCordova ...

  5. ionic中的生命周期函数

    //ionic中的生命周期函数 onPageLoaded(){ //page初始化时 console.log("page 1 : page loaded"); } //在这里可以做 ...

  6. Ionic中弹窗

    Ionic中弹窗有两种ionicModal和ionicPopup; $ionicModal是完整的页面: $ionicPopup是(Dialog)对话框样式的,直接用JavaScript设定对话框的一 ...

  7. ZH奶酪:Ionic中(弹出式窗口)的$ionicModal使用方法

    Ionic中[弹出式窗口]有两种(如下图所示),$ionicModal和$ionicPopup; $ionicModal是完整的页面: $ionicPopup是(Dialog)对话框样式的,直接用Ja ...

  8. ionic中android的返回键

    ionic中android的返回键 在ionic框架中已经注册了几个返回事件,分别是 view sideMenu modal actionSheet popup loading 他们的优先级分别是 v ...

  9. Ionic 中badge的应用

    app中如果有服务端推送过来的消息,用户没有查看的话,出现一个数字提醒,类似微信的那种效果. 在Ionic中的实现过程还是很简单的: <ion-tab title="首页" ...

随机推荐

  1. The 18th Zhejiang University Programming Contest Sponsored by TuSimple

    Pretty Matrix Time Limit: 1 Second      Memory Limit: 65536 KB DreamGrid's birthday is coming. As hi ...

  2. 内存分配机制malloc&&alloca&&realloc

    <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2>在栈上创建       在执 ...

  3. HDU-2853 Assignment

    求二分最大匹配,但还要尽量接近原匹配... 解决方法:对于N个顶点的二分图,每条边同时乘上一个比N稍微大的数N',然后对于在原匹配的边就都+1. 经过这样处理,求得的答案Ans乘除N'即是原图的最大匹 ...

  4. [CF888G] Xor-mst (Trie 树,最小生成树)

    题目链接 Solution \(Trie\) 树 + 启发式合并. 考虑到是异或,于是按位贪心.让高位的尽量相同. 然后要计算每棵子树的代价,似乎并没有很好的方法?? 于是只能启发式合并. 对于每一个 ...

  5. java面试题之为什么hashmap的数组初始化大小都是2的N次方?

    当数组长度为2的N次方时,不同的key算出的index相同的几率小,数据在数组上分配均匀,hash碰撞的几率小,提升查询效率,从大O(N)提升至O(1):

  6. wamp出现You don’t have permission to access/on this server提示

    本地搭建wamp,输入http://127.0.0.1访问正常,当输入http://localhost/,apache出现You don't have permission to access/on ...

  7. 树上的路径 BZOJ 3784

    树上的路径 [问题描述] 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a<b.将这n*(n-1)/2个距 ...

  8. es6总结(七)--数据结构-Set & Map

  9. HDU 6218 (线段树+set)

    HDU 6218 Bridge Problem : 给一个2×n的矩阵,一开始矩阵所有相邻点之间有一条边.有其.个询问,每次给出两个相邻的点的坐标,将其中的边删除或者添加,问如此操作之后整张图的割边数 ...

  10. cpu乱序执行

    http://blog.163.com/zhaojie_ding/blog/static/1729728952007925111324379/?suggestedreading 处理器的乱序和并发执行 ...