前提条件
node、 bower、 git、 gulp
安装
node:
git: 安装完之后还需要设置环境变量,这个就不详细说了,自行搞定
gulp: gulp基于node.js,前面我们已经安装好了node,现在就可以用npm通过命令行来安装gulp。先是全局安装,在npm上敲这行命令:npm install gulp -g
,-g
就是global的缩写,输入命令:gulp -v
可以查看你当前使用的版本,出现版本号也说明安装成功了。全局安装完了,还要在你的项目上安装:npm install gulp --save-dev
bower: 同样是使用npm:npm install bower –g
检查版本:bower –v
到这里,我们需要的工具就安装完,可以告一段落了。下面开始这些工具的使用。
Bower
bower install jquery
bower install bootstrap
这样jquery和bootstrap文件就会被下载到项目自动生成的bower_components文件夹下了。当然,如果你不想把它存在bower_components下的话,可以创建.bowerrc文件,设置directory属性,例如:{directory:"name"}
注意:.bowerrc和bower.json是在同一级目录下的。
包的安装方式有多种(来源于):
# installs the project dependencies listed in bower.json
$ bower install
# registered package
$ bower install jquery
# GitHub shorthand
$ bower install desandro/masonry
# Git endpoint
$ bower install git://github.com/user/package.git
# URL
$ bower install http://example.com/script.js
安装好了包之后,就可以使用你需要的文件了:
Gulp
介绍
使用gulp前需要在项目根目录配置gulpfile.js文件,举个简单的例子,假设我要把在bower_components包复制到public/static/libs里,gulpfile.js中的代码如下:
var gulp = require("gulp");
gulp.task("copy",function(){
return gulp.src("bower_components/**")
.pipe(gulp.dest("public/static/libs"));
});
首先需要用require获取模板,然后是建立任务,gulp.task()
的第一个参数是任务名,回调函数用于处理任务;gulp.src()
中的是要处理的文件的路径,两个 * 表示文件夹,一个* 表示文件。pipe()
我自己理解的是任务处理队列,你是要对文件压缩还是重命名都把方法写进pipe()
中,gulp.dest()
是输出经过处理的文件,参数是文件夹名,如果原先不存在,会自动创建。这里需要注意的是,gulp.dest()
中的参数如果是file.js之类的文件名,但是创建的只会是名为file.js的文件夹。
现在写好了gulpfile.js,要运行了,前面已经安装好了项目依赖,所以这里可以直接运行:gulp copy
(gulp+任务名)
当出现:
Using gulpfile.js (gulpfile.js路径)
Starting 'copy' ...
Finished 'copy' after xx ms
就说明运行成功,bower_components中的包已经复制到public/static/libs里(如果gulpfile.js没写错的话),你可以去对应文件夹中查看
这里要说明几点:
1.如果require的模板除了gulp之外还有其他模板如rename(重命名),那么运行之前需要安装这个模板:npm install gulp-rename --save-dev
2.gulp.task("default",fn);
如果gulp.task()
的第一个参数是default的话,命令行输入的就不是gulp default
而是gulp
了。前面有说到输入命令gulp + 任务名就可执行对应的任务,但是要求是任务名不能有空格。gulp.task()
的第二个参数可以是一个存储任务名的数组,如gulp.task("default",["copy","minifycss","minifyjs"]);
执行gulp
时就会执行数组中的多个任务。
3.gulp.dest()
可以多次使用,例如:
gulp.src("js/example.js")
.pipe(gulp.dest("test/js")) //输出到test/js
.pipe(gulp.rename(suffix{".min"})) //添加后缀min,example.min.js
.pipe(gulp.dest("dist/js")) //输出到dist/js
举例
压缩css
var gulp = require("gulp"),minifycss = require("gulp-minify-css"),//css压缩模板
rename = require("gulp-rename");
gulp.task("css",function(){
return gulp.src("**/css/*.css")
.pipe(minifycss()) //压缩css
.pipe(rename({suffix:".min"})) //添加min后缀
.pipe(gulp.dest("dist/css"));
});
执行前先安装:npm install gulp-minify-css gulp-rename --save-dev
压缩js
var gulp = require("gulp"),concat = require("gulp-concat"),//合并模板
uglify = require("gulp-uglify"),//js压缩模板
rename = require("gulp-rename");
gulp.task("js",function(){
return gulp.src("**/js/*.js")
.pipe(concat()) //合并js
.pipe(uglify()) //压缩js
.pipe(rename({suffix:".min"}))
.pipe(gulp.dest("dist/js"));
});
压缩图片
var gulp = require("gulp"),imagemin = require("gulp-imagemin"); //图片压缩模板
gulp.task("images",function(){
return gulp.src("**/images/*.*")
.pipe(imagemin({
progressive:true
})).pipe(gulp.dest("dist/minifyImages"))
});
替换html中的路径
开发环境中使用的是压缩过的css,js等文件,那么html中引入css,js的路径需要被替换掉
需要在html引入css,js的位置进行builder注释
//css
//js