前端自动化构建工具 - gulp
前端现阶段主流自动化构建工具有:grunt,gulp,webpack等,他们能对网站资源进行优化,大大提高我们的工作效率;gulp是基于NodeJS的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。让我们一起来学习gulpj简单的吧吧! ^_^
一,NodeJS的环境搭建:
说明:gulp是基于nodejs,理所当然需要安装nodejs;
安装:打开NodeJS官网 -> 点击Download按钮 ->根据自身电脑系统选择对应版本(.msi文件)->傻瓜试(next)就可以了(安装路径随意)。
二,命令行操作:
命令行在OSX是终端(Terminal),在windows是命令提示符(Command Prompt,即开始 ->搜索cmd);
本例操作是在windows系统下进行的,进入cmd(即:点击开始 ->搜索cmd回车);
node -v查看安装的nodejs版本,出现版本号,说明已正确安装nodejs。PS:未能出现版本号,请尝试注销电脑重试;
npm -v查看npm的版本号,npm是在安装nodejs时一同安装的nodejs包管理器;
cd定位到你的项目下的目录,用法:cd + 项目路径 ;
dir列出文件列表;
cls清空命令提示符窗口内容。
三,npm的介绍(本文结合css框架sass,和webstrom开发工具)
npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等);
npm使用前提:基于NodeJS环境和Git环境(本文不做详解)两者之上才可以使用。没有的话先安装;
以下操作在webstrom开发工具Terminal中进行(在cmd中操作相同);
首先,进入项目路径下;
npm安装插件命令两种:
全局安装: npm install <name> [-g];
局部安装
:
npm install <name>
[--save-dev]
;
<name>:要安装的node插件名称。例:npm install gulp -g (全局安装)
npm install gulp
-g 全局安装。将会安装在C:\Users\Administrator\AppData\Roaming\npm
,并且写入系统环境变量;
npm install gulp
--save-dev
局部安装:将会安装在当前定位目录; 全局安装可以通过命令行在任何地方调用它,本地安装将安装在定位目录的node_modules文件夹下,通过require()调用;
--save
:将保存配置信息至package.json(package.json是NodeJS项目配置文件);
-dev:保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点;一般保存在dependencies的像这些express/ejs/body-parser等等。
为什么要保存至package.json?因为node插件包相对来说非常庞大,所以不加入版本管理,将配置信息写入package.json并将其加入版本管理,其他开发者对应下载即可
npm init 一直回车,初始化产生node_modules文件,package.json
npm install,则会根据package.json下载所有需要的包,npm install --production
只下载dependencies节点的包。
package.json是一个普通json文件,所以不能添加任何注释,每安装一个插件文件中将多一个插件名及版本号。内容 如下:
1 { 2 "name": "gulp-demo", 3 "version": "1.0.0", 4 "description": "", 5 "main": "index.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "author": "", 10 "license": "ISC", 11 "devDependencies": { 12 "grunt-autoprefixer": "^3.0.4", 13 "gulp": "^3.9.1", 14 "gulp-autoprefixer": "^3.1.1", 15 "gulp-concat": "^2.6.0", 16 "gulp-connect": "^5.0.0", 17 "gulp-htmlmin": "^3.0.0", 18 "gulp-imagemin": "^3.0.3", 19 "gulp-minify-css": "^1.2.4", 20 "gulp-rename": "^1.2.2", 21 "gulp-rev": "^7.1.2", 22 "gulp-rev-collector": "^1.0.5", 23 "gulp-sass": "^2.3.2", 24 "gulp-uglify": "^2.0.0" 25 } 26 }
使用npm卸载插件:npm uninstall <name> [-g] [--save-dev]
PS:不要直接删除本地插件包
删除全部插件:npm uninstall gulp-less gulp-uglify gulp-concat ……???太麻烦
借助rimraf:npm install rimraf -g 用法:rimraf node_modules
使用npm更新插件:npm update <name> [-g] [--save-dev]
更新全部插件:npm update [--save-dev]
查看npm帮助:npm help
当前目录已安装插件:npm list
四,gulp安装
全局安装:npm install gulp -g
局部(本地)安装(当前项目路径下):npm install gulp -save-dev
查看是否正确安装:命令提示符执行gulp -v,出现版本号即为正确安装。
全局安装gulp是为了执行gulp任务,本地安装gulp则是为了调用gulp插件的功能。
五,新建gulpfile.js文件
gulpfile.js是gulp项目的配置文件,是位于项目根目录的普通js文件(其实将gulpfile.js放入其他文件夹下亦可)。
六,实例展示(结合sass框架,webstorm开发工具)
gulpfile.js文件中的gulp常见命令
1 var gulp = require("gulp"); //gulp核心模块 2 var sass = require("gulp-sass"); //sass编译 3 var server = require("gulp-connect"); //服务器 4 var concat = require("gulp-concat"); //合并 5 var uglify = require("gulp-uglify"); //压缩 6 var minifyCss = require("gulp-minify-css"); //css压缩 7 var imgmin = require("gulp-imagemin"); //图片压缩 8 var rename = require("gulp-rename"); //对文件进行重命名 9 var rev = require("gulp-rev"); //给静态资源添加上一个hash值后缀 10 var revCollector = require("gulp-rev-collector"); //根据rev生成manifest用来替换html link 11 var prefixer = require("gulp-autoprefixer"); //自动添加浏览器厂商前缀 12 var htmlmin = require("gulp-htmlmin"); //对页面进行压缩 13 14 gulp.task("default",["copyindex","copy-img","copy-data"]); 15 16 //根据rev-manifest对link路径进行替换 17 gulp.task("rev-collector",function(){ 18 return gulp.src(["dist/css/**/*.json","dist/index.html"]) 19 .pipe(revCollector({ 20 replaceReved: true, 21 })) 22 .pipe(gulp.dest("dist/")) 23 24 }) 25 gulp.task("addPrx",function(){ 26 return gulp.src("src/css2/*.css") 27 .pipe(prefixer({ 28 browsers: ['last 2 versions', 'Android >= 4.0'], 29 cascade: true, //是否美化属性值 默认:true 像这样: 30 remove:true //是否去掉不必要的前缀 默认:true 31 })) 32 .pipe(gulp.dest("dist/css/")) 33 }) 34 35 //创建服务器 36 gulp.task("server",function(){ 37 server.server({ 38 root:"dist" 39 }) 40 }) 41 //js 合并 42 gulp.task("js",function(){ 43 return gulp.src("src/js/**/*") 44 .pipe(concat("all.js")) 45 .pipe(gulp.dest("dist/js/")) 46 }); 47 //合并与压缩 48 gulp.task("js-c",function(){ 49 return gulp.src("src/script/**/*") 50 .pipe(concat("all-c.js")) 51 .pipe(gulp.dest("dist/js/")) 52 .pipe(uglify()) 53 .pipe(rename("all-c-min.js")) 54 .pipe(gulp.dest("dist/js/")) 55 }); 56 57 //对css文件进行压缩 58 gulp.task("css",function(){ 59 return gulp.src("src/css/*.css") 60 .pipe(minifyCss()) 61 .pipe(gulp.dest("dist/css/")) 62 .pipe(rev()) 63 .pipe(gulp.dest("dist/css/")) 64 .pipe(rev.manifest()) 65 .pipe(gulp.dest("dist/css/")) 66 }) 67 68 69 //<!--copy src:操作的目录 dest:目标目录--> 70 gulp.task("copyindex",function(){ 71 return gulp.src("src/index.html") 72 .pipe(htmlmin({ 73 minifyCSS:true, 74 minifyJS:true, 75 removeComments:true, 76 collapseWhitespace:true 77 })) 78 .pipe(gulp.dest("dist/")) 79 }) 80 81 //批量copy 82 gulp.task("copy-img",function(){ 83 return gulp.src("src/images/**/*") 84 .pipe(imgmin()) 85 .pipe(gulp.dest("dist/images/")) 86 }) 87 88 //多组文件的操作 89 gulp.task("copy-data",function(){ 90 return gulp.src(["src/json/*","src/xml/*","!src/json/s-*.json"]) 91 .pipe(gulp.dest("dist/data/")); 92 }) 93 94 gulp.task("sass-c",function(){ 95 return gulp.src("src/scss/**/*.scss") 96 .pipe(sass()) 97 98 .pipe(gulp.dest("dist/css/")) 99 }) 100 101 //watch 102 gulp.task("watch",function(){ 103 gulp.watch("src/index.html",["copyindex"]); 104 gulp.watch("src/images/**/*",["copy-img"]); 105 gulp.watch(["src/json/*","src/xml/*"],["copy-data"]); 106 107 })
使用方法:将项目导入webstorm,右键gulpfile.js 选择”Show Gulp Tasks”打开Gulp窗口,若出现”No task found”,选择右键”Reload tasks”,双击运行即可。
本文有任何错误,或有任何疑问,欢迎留言说明!