SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Downloaden Sie, um offline zu lesen
Gulp.js + Sublime plugin

⾃自動化前端任務流程
講者:廖洧杰
About Me
• 前端⼯工程師
• Desktop / Mobile 前端開發
• ⾼高雄前端發起⼈人 (2013/3)
• ⺫⽬目前投⼊入Node.js、MongoDB
進⼊入主題
什麼是⾃自動化?
節省⼈人⼯工時間
讓機器⾃自動處理任務
為什麼前端要導⼊入
⾃自動化?
CSS Sprite
舉個例⼦子
CSS Sprites
!
.logo{	
width:46px;	
height:46px;	
background: url(all.png) 0 0;	
}
http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/
⼈人⽣生第⼀一個CSS sprite
1. 設計這張CSS Sprites花了我四個⼩小時
2. 圖⽚片時常需要開啟PS進⾏行編輯,必須精準定位
3. ⾃自訂class名稱
4. 時常位移沒算準,顯⽰示出額外的圖⽰示
5. 有新圖⽰示時,新增⼀一個⾄至少要10分鐘以上
後來改⽤用線上服務

http://goo.gl/J2nizo
直到遇上

Sass、Compass
@import "compass/utilities/sprites";	
@import "my-icons/*.png";	
@include all-my-icons-sprites;
!
.my-icons-delete,	
.my-icons-edit,	
{ background: url('/images/my-icons-
s34fe0604ab.png') no-repeat; }	
!
.my-icons-delete { background-position: 0
0; }	
.my-icons-edit { background-position: 0
-32px; }	
-64px; }	
將圖⽚片丟進資料夾,

⾃自動幫你合併圖⽚片、命名Class
要將前端開發盡量整合
在同條線上⾮非常困難
https://github.com/JacksonTian/fks
Gulp
使⽤用javascript撰寫任務排程
將前後端任務有條理地
交給Gulp去運⾏行
前端開發流程
• 後端環境建置(Node.js、Ruby、PHP)
• 前端程式語⾔言(Jade、Coffee、Sass)
• Framework選擇(Angular、Bootstrap、jQuery)
• 程式優化⽅方案(測試、編譯、壓縮)
安裝Gulp
• 安裝Node.js
• 安裝Gulp npm install gulp -g
Gulp必備檔案
• package.json:整理gulp plugin
• gulpfile.js:撰寫任務化流程
• ⽇日後有⼈人加⼊入專案,

只要有這兩隻就能瞬間將環境建⽴立好
Gulp起⼿手式(上)
!
• gulp.task(name[, deps], fn)

定義⼀一個任務名稱,接下來指定任務的⼯工作內容
• gulp.watch(glob[, opts, cb])

關注特定檔案是否更動
• gulp.src(glob) 

指定檔案來源
• gulp.dest(folder) 

檔案存檔位置
Gulp起⼿手式(下)
• gulpfile.js
!
var gulp = require('gulp');	
!
gulp.task('default',['build'] function() {	
// 系統預設直接執⾏行	
});	
!
gulp.task('build', function() {	
// 其他task預設不執⾏行,可透過default預先載⼊入	
});
Gulp起⼿手式(下)
• gulpfile.js
!
var gulp = require('gulp');	
!
gulp.task('default',['build'] function() {	
// 系統預設直接執⾏行	
});	
!
gulp.task('build', function() {	
// 其他task預設不執⾏行,可透過default預先載⼊入	
});
步驟⼀一:預設載⼊入gulp,才可使⽤用gulp功能。

例:gulp.task、gulp.watch

Gulp起⼿手式(下)
• gulpfile.js
!
var gulp = require('gulp');	
!
gulp.task('default',['build'] function() {	
// 系統預設直接執⾏行	
});	
!
gulp.task('build', function() {	
// 其他task預設不執⾏行,可透過default預先載⼊入	
});步驟⼆二:新增⼀一個task任務,命名為default,
當gulp啟動時,default會預設觸發。
Gulp起⼿手式(下)
• gulpfile.js
!
var gulp = require('gulp');	
!
gulp.task('default',['build'] function() {	
// 系統預設直接執⾏行	
});	
!
gulp.task('build', function() {	
// 其他task預設不執⾏行,可透過default預先載⼊入	
});
步驟三:其他task系統預設不執⾏行,但可透過default預先載⼊入
gulp-connect
建⽴立web server
1.輸⼊入指令碼安裝
npm install gulp-connect —-save-dev
node_modules gulp-connect
"devDependencies": {	
"gulp-connect": "^2.2.0"	
}
package.json
2.在gulpfile.js撰寫語法









var gulp = require('gulp'),	
connect = require('gulp-connect');	
gulp.task('server', function() {	
connect.server();	
});	
gulp.task('default',['server'],function(){});
2.在gulpfile.js撰寫語法









var gulp = require('gulp'),	
connect = require('gulp-connect');	
gulp.task('server', function() {	
connect.server();	
});	
gulp.task('default',['server'],function(){});	
步驟⼀一:載⼊入node_modules裡⾯面的gulp-connect模組
2.在gulpfile.js撰寫語法









var gulp = require('gulp'),	
connect = require('gulp-connect');	
gulp.task('server', function() {	
connect.server();	
});	
gulp.task('default',['server'],function(){});	
步驟⼆二:撰寫task任務,命名為server,
connect.server()是gulp-connect的其中⼀一個功能,
即創⽴立⼀一個web server。
2.在gulpfile.js撰寫語法









var gulp = require('gulp'),	
connect = require('gulp-connect');	
gulp.task('server', function() {	
connect.server();	
});	
gulp.task('default',['server'],function(){});	
步驟三:為了讓server能直接開啟,所以寫在預設
default裡⾯面。
Sass、Livereload
npm install gulp-compass --dev-save
gulpfile.js

var gulp = require('gulp'),	
connect = require('gulp-connect'),	
compass = require('gulp-compass');	
gulp.task('server', function() {	
connect.server({	
livereload: true	
});	
});	
gulp.task('compass', function() {	
gulp.src('./sass/*.sass')	
.pipe(compass())	
.pipe(gulp.dest('./css'))	
.pipe(connect.reload());	
});	
gulp.task('default',['server','compass'],function(){	
gulp.watch('./sass/*',['compass']);	
});
gulpfile.js

var gulp = require('gulp'),	
connect = require('gulp-connect'),	
compass = require('gulp-compass');	
gulp.task('server', function() {	
connect.server({	
livereload: true	
});	
});	
gulp.task('compass', function() {	
gulp.src('./sass/*.sass')	
.pipe(compass())	
.pipe(gulp.dest('./css'))	
.pipe(connect.reload());	
});	
gulp.task('default',['server','compass'],function(){	
gulp.watch('./sass/*',['compass']);	
});	
gulp-connect預設有livereload設定,

這些api⽤用法都要去NPM 官網都會寫。
ˇ
var gulp = require('gulp'),	
connect = require('gulp-connect'),	
compass = require('gulp-compass');	
gulp.task('server', function() {	
connect.server({	
livereload: true	
});	
});	
gulp.task('compass', function() {	
gulp.src('./sass/*.sass')	
.pipe(compass())	
.pipe(gulp.dest('./css'))	
.pipe(connect.reload());	
});	
gulp.task('default',['server','compass'],function(){	
gulp.watch('./sass/*',['compass']);	
});	
gulp.src指定檔案,*號代表所有Sass檔案,
可透過pipe將任務依序傳遞,
gulp.dest是指最終將檔案所放置的位置,
connect.reload()則是將瀏覽器重新refresh。
ˇ
var gulp = require('gulp'),	
connect = require('gulp-connect'),	
compass = require('gulp-compass');	
gulp.task('server', function() {	
connect.server({	
livereload: true	
});	
});	
gulp.task('compass', function() {	
gulp.src('./sass/*.sass')	
.pipe(compass())	
.pipe(gulp.dest('./css'))	
.pipe(connect.reload());	
});	
gulp.task('default',['server','compass'],function(){	
gulp.watch('./sass/*',['compass']);	
});	
利⽤用gulp.watch監聽根⺫⽬目錄Sass資料夾內的檔案,
有更新就觸發compass的task。
合併與壓縮js
gulp-concat、gulp-uglify
npm install gulp-concat gulp-uglify --dev-save
gulpfile.js

var gulp = require('gulp'),	
concat = require(‘gulp-concat')	
uglify = require('gulp-uglify');	
gulp.task('js', function() { 	
gulp.src('./js/*.js') 	
.pipe(concat(‘app.js')) //將所有js合併成app.js	
.pipe(uglify()) //壓縮js	
.pipe(gulp.dest(‘./dist/js/')) 	
});	
!
gulp.task('default',['js'],function(){	
gulp.watch(‘./js/*',['js']); //監聽js檔案	
});
DEMO
熱⾨門Plugin
• gulp-connect 開啟server
• gulp-concat 合併
• gulp-imagemin 圖⽚片壓縮
• gulp-clean 清除檔案
• gulp-rename 重新命名
• gulp-minify-css 壓縮CSS
• gulp-jshint JS Debug
• gulp-uglify 壓縮檔案
preprocessor
• gulp-compass
• gulp-less
• gulp-stylus
• gulp-jade
• gulp-slim
• gulp-coffee
• gulp-livescript
BrowserSync
跨載具測試、livereload
npm install browser-sync gulp --save-dev
Bower
前端框架管理 by bower.json
npm install gulp-bower gulp --save-dev
hologram
透過Sass、CSS註解同步撰寫style guides⽂文件
npm install gulp-hologram gulp --save-dev
mocha
web測試
npm install gulp-mocha gulp --save-dev
建⽴立⾃自⼰己的⼀一條⻯⿓龍開發流程
建⽴立前後端環境 開發編譯
style⽂文件web測試專案上線
版本控管
後續維護
sublime plugin
• 1.emmet - 減少打錯字的機會
• 2.HTML CSS JS Prettify - ⾃自動排版
• 3.SublimeLinter - Debug Code
• 4.autofilename - ⾃自動搜尋檔案位置
Thanks
Q&A

Weitere ähnliche Inhalte

Was ist angesagt?

React state managmenet with Redux
React state managmenet with ReduxReact state managmenet with Redux
React state managmenet with ReduxVedran Blaženka
 
React Context API
React Context APIReact Context API
React Context APINodeXperts
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetesSangSun Park
 
Fast Insight from Fast Data: Integrating ClickHouse and Apache Kafka
Fast Insight from Fast Data: Integrating ClickHouse and Apache KafkaFast Insight from Fast Data: Integrating ClickHouse and Apache Kafka
Fast Insight from Fast Data: Integrating ClickHouse and Apache KafkaAltinity Ltd
 
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka Edureka!
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기Yeonhee Kim
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js ExpressEyal Vardi
 
K8s cluster autoscaler
K8s cluster autoscaler K8s cluster autoscaler
K8s cluster autoscaler k8s study
 
An Introduction to MongoDB Ops Manager
An Introduction to MongoDB Ops ManagerAn Introduction to MongoDB Ops Manager
An Introduction to MongoDB Ops ManagerMongoDB
 
Terraform: An Overview & Introduction
Terraform: An Overview & IntroductionTerraform: An Overview & Introduction
Terraform: An Overview & IntroductionLee Trout
 
ASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bitsASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bitsKen Cenerelli
 
Apache Spark & Scala
Apache Spark & ScalaApache Spark & Scala
Apache Spark & ScalaEdureka!
 
WSO2 Message Broker - Product Overview
WSO2 Message Broker - Product OverviewWSO2 Message Broker - Product Overview
WSO2 Message Broker - Product OverviewWSO2
 
quick intro to elastic search
quick intro to elastic search quick intro to elastic search
quick intro to elastic search medcl
 

Was ist angesagt? (20)

React state managmenet with Redux
React state managmenet with ReduxReact state managmenet with Redux
React state managmenet with Redux
 
React Context API
React Context APIReact Context API
React Context API
 
React Hooks
React HooksReact Hooks
React Hooks
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
 
Fast Insight from Fast Data: Integrating ClickHouse and Apache Kafka
Fast Insight from Fast Data: Integrating ClickHouse and Apache KafkaFast Insight from Fast Data: Integrating ClickHouse and Apache Kafka
Fast Insight from Fast Data: Integrating ClickHouse and Apache Kafka
 
Rac 12c optimization
Rac 12c optimizationRac 12c optimization
Rac 12c optimization
 
React hooks
React hooksReact hooks
React hooks
 
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
MapReduce Example | MapReduce Programming | Hadoop MapReduce Tutorial | Edureka
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기
 
Node.js Express
Node.js  ExpressNode.js  Express
Node.js Express
 
K8s cluster autoscaler
K8s cluster autoscaler K8s cluster autoscaler
K8s cluster autoscaler
 
An Introduction to MongoDB Ops Manager
An Introduction to MongoDB Ops ManagerAn Introduction to MongoDB Ops Manager
An Introduction to MongoDB Ops Manager
 
Terraform: An Overview & Introduction
Terraform: An Overview & IntroductionTerraform: An Overview & Introduction
Terraform: An Overview & Introduction
 
ASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bitsASP.NET Core: The best of the new bits
ASP.NET Core: The best of the new bits
 
Nodejs vatsal shah
Nodejs vatsal shahNodejs vatsal shah
Nodejs vatsal shah
 
Apache Spark & Scala
Apache Spark & ScalaApache Spark & Scala
Apache Spark & Scala
 
WSO2 Message Broker - Product Overview
WSO2 Message Broker - Product OverviewWSO2 Message Broker - Product Overview
WSO2 Message Broker - Product Overview
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 
quick intro to elastic search
quick intro to elastic search quick intro to elastic search
quick intro to elastic search
 

Ähnlich wie Gulp.js 自動化前端任務流程

使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发leneli
 
Sencha SDK Tools简介:IE6上也可以用CSS3?
Sencha SDK Tools简介:IE6上也可以用CSS3?Sencha SDK Tools简介:IE6上也可以用CSS3?
Sencha SDK Tools简介:IE6上也可以用CSS3?Frank Cheung
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 GradleJustin Lin
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimizationtbosstraining
 
如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進Mu Chun Wang
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统Frank Xu
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027Wei Sun
 
Dive into kissy
Dive into kissyDive into kissy
Dive into kissyjay li
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)Kejun Zhang
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Designjay li
 
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swttka
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)Wei Sun
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
Kissy模块化实践
Kissy模块化实践Kissy模块化实践
Kissy模块化实践yiming he
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構Mu Chun Wang
 

Ähnlich wie Gulp.js 自動化前端任務流程 (20)

使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发
 
Sencha SDK Tools简介:IE6上也可以用CSS3?
Sencha SDK Tools简介:IE6上也可以用CSS3?Sencha SDK Tools简介:IE6上也可以用CSS3?
Sencha SDK Tools简介:IE6上也可以用CSS3?
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
 
Kissy design
Kissy designKissy design
Kissy design
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization
 
Mvc
MvcMvc
Mvc
 
如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
 
Dive into kissy
Dive into kissyDive into kissy
Dive into kissy
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
 
Responsive Web UI Design
Responsive Web UI DesignResponsive Web UI Design
Responsive Web UI Design
 
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
Kissy模块化实践
Kissy模块化实践Kissy模块化实践
Kissy模块化实践
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
 

Mehr von 洧杰 廖

一拳前端考題
一拳前端考題一拳前端考題
一拳前端考題洧杰 廖
 
Sass&rwd前端版型架構規劃
Sass&rwd前端版型架構規劃Sass&rwd前端版型架構規劃
Sass&rwd前端版型架構規劃洧杰 廖
 
自從學會Sass / Compass後,考試都考100分!
自從學會Sass / Compass後,考試都考100分!自從學會Sass / Compass後,考試都考100分!
自從學會Sass / Compass後,考試都考100分!洧杰 廖
 
Vertical rhythm
Vertical rhythmVertical rhythm
Vertical rhythm洧杰 廖
 
前端開發流程分享
前端開發流程分享前端開發流程分享
前端開發流程分享洧杰 廖
 
那些年,我們曾經做過的wireframe、mockup、prototype
那些年,我們曾經做過的wireframe、mockup、prototype那些年,我們曾經做過的wireframe、mockup、prototype
那些年,我們曾經做過的wireframe、mockup、prototype洧杰 廖
 
Sass-Front-End Developers Taiwan Party - 5
Sass-Front-End Developers Taiwan Party - 5Sass-Front-End Developers Taiwan Party - 5
Sass-Front-End Developers Taiwan Party - 5洧杰 廖
 
高雄前端社群 #6 絕對教會你jQuery動畫效果
高雄前端社群 #6 絕對教會你jQuery動畫效果高雄前端社群 #6 絕對教會你jQuery動畫效果
高雄前端社群 #6 絕對教會你jQuery動畫效果洧杰 廖
 
高雄前端社群 #4 psdtohtml workshop
高雄前端社群 #4 psdtohtml workshop高雄前端社群 #4 psdtohtml workshop
高雄前端社群 #4 psdtohtml workshop洧杰 廖
 
高雄前端社群 #3 SASS workshop
高雄前端社群 #3 SASS workshop高雄前端社群 #3 SASS workshop
高雄前端社群 #3 SASS workshop洧杰 廖
 
現代化網頁基礎排版技術
現代化網頁基礎排版技術現代化網頁基礎排版技術
現代化網頁基礎排版技術洧杰 廖
 
如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化洧杰 廖
 

Mehr von 洧杰 廖 (12)

一拳前端考題
一拳前端考題一拳前端考題
一拳前端考題
 
Sass&rwd前端版型架構規劃
Sass&rwd前端版型架構規劃Sass&rwd前端版型架構規劃
Sass&rwd前端版型架構規劃
 
自從學會Sass / Compass後,考試都考100分!
自從學會Sass / Compass後,考試都考100分!自從學會Sass / Compass後,考試都考100分!
自從學會Sass / Compass後,考試都考100分!
 
Vertical rhythm
Vertical rhythmVertical rhythm
Vertical rhythm
 
前端開發流程分享
前端開發流程分享前端開發流程分享
前端開發流程分享
 
那些年,我們曾經做過的wireframe、mockup、prototype
那些年,我們曾經做過的wireframe、mockup、prototype那些年,我們曾經做過的wireframe、mockup、prototype
那些年,我們曾經做過的wireframe、mockup、prototype
 
Sass-Front-End Developers Taiwan Party - 5
Sass-Front-End Developers Taiwan Party - 5Sass-Front-End Developers Taiwan Party - 5
Sass-Front-End Developers Taiwan Party - 5
 
高雄前端社群 #6 絕對教會你jQuery動畫效果
高雄前端社群 #6 絕對教會你jQuery動畫效果高雄前端社群 #6 絕對教會你jQuery動畫效果
高雄前端社群 #6 絕對教會你jQuery動畫效果
 
高雄前端社群 #4 psdtohtml workshop
高雄前端社群 #4 psdtohtml workshop高雄前端社群 #4 psdtohtml workshop
高雄前端社群 #4 psdtohtml workshop
 
高雄前端社群 #3 SASS workshop
高雄前端社群 #3 SASS workshop高雄前端社群 #3 SASS workshop
高雄前端社群 #3 SASS workshop
 
現代化網頁基礎排版技術
現代化網頁基礎排版技術現代化網頁基礎排版技術
現代化網頁基礎排版技術
 
如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化如何逐步提升CSS的可利用性、模組化
如何逐步提升CSS的可利用性、模組化
 

Gulp.js 自動化前端任務流程