前提条件
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。bower是用于管理前端依赖的包管理器,上有一段话是这么介绍它的功能的:Bower can manage components that contain HTML,CSS,JavaScript,fonts or even image files. Bower doesn’t concatenate or minify code or do anything else - it just installs the right versions of the packages you need and their dependencies. 翻译过来就是说bower只是安装你所需要的包和依赖。例如你要在一个html中引用jquery文件,不需要去网上搜索下载,直接通过bower就可以安装jquery。那么bower是怎么安装包和依赖的呢? 首先你需要配置名为bower.json的文件,可以使用命令bower init
回答问题后生成或者手动创建添加内容。bower.json存放在项目的根目录下,它保存的内容是项目的库信息。 现在来安装jquery和bootstrap依赖,刚才安装的git这里就用上了。在项目根目录上打开git bash,输入命令:
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