前言php
在WEB開發中,咱們一直在尋求更方便,快捷的方式,如今主要從以下幾個問題入手,學習一些入門級的自動化開發方案。css
一、 CSS壓縮;html
二、 JS壓縮;前端
三、 JS依賴包的管理;html5
四、 各終端瀏覽器自動實時同步,解脫反覆手動刷新與清緩存工做,很是適合響應式開發;java
五、 項目自動發佈。node
首先看下傳統的開發模式,從編碼、調試到發佈,要作若干反覆繁瑣的操做,長期以來,會浪費不少寶貴的時間,工做效率是很低的。jquery
不難看出,css與js的壓縮,須要安裝對應的工具,並且還有可能每次都要執行下對應的命令。每每開發目錄中還有不少輔助的文件或代碼,不但願推上線,因此在發佈時,還要費勁的去篩選拷貝最終的代碼到生產環境。linux
那麼有沒有一種方法,自動完成這些工做呢?曾經也任性的開發了一套自動化的工具,漠然回首,才發現已有不少高人發明了更先進的技術,與時俱進,也小試一把,幫助咱們提升工做效率。android
先不講空洞的概念,直接看下咱們要實現什麼樣的效果,能給咱們帶來什麼樣的好處。
(1)修改CSS,多瀏覽器同步實時刷新。
(2)修改後臺代碼,多瀏覽器同步實時刷新。
(3)多瀏覽器鏡像。
是否是很想親自嘗試一下?其實還遠不止這些功能,下面就詳細介紹如何搭建這樣一個環境。
目錄
一、NodeJS簡介與安裝
二、GULP的安裝與使用
三、BrowserSync同步調試
四、Bower簡介
五、AngularJS簡介
六、html5真機調試
七、Laravel安裝(windows環境)
NodeJS簡介與安裝
百度解釋:Node.js 是一個基於Chrome JavaScript 運行時創建的一個平臺, 用來方便地搭建快速的 易於擴展的網絡應用· Node.js 藉助事件驅動, 非阻塞I/O 模型變得輕量和高效, 很是適合 運行在分佈式設備 的 數據密集型 的實時應用。
我的理解:NodeJS就是一個JS解析器,經過其提供的JS語法的API,能夠構建一系列應用程序,就比如java與JDK,開發出的應用能夠在JVM中運行,或者用php.exe命令執行*.php文件的關係。
下載->安裝:Windows直接根據提示,完成安裝,linux須要下載源碼編譯安裝。(http://www.nodejs.org/download/)
驗證是否安裝成功:啓動命令行,輸入node -v,若是出現版本號,則安裝成功,不然須要檢查下環境變量,將nodejs目錄(默認C:\Program Files\nodejs)加入path環境變量中。
同時,還自帶了一個npm工具,npm是Node.js的模塊依賴管理工具,至關於linux上的yum和apt-get。一樣檢查是否安裝成功,後面會用到。
Nodejs安裝完成,如今就能夠簡單看下NodeJS能作些什麼。
在任意目錄中新建一個demo.js文件,內容以下:
1 var http = require("http"); 2 http.createServer(function(request, response) { 3 response.writeHead(200, {"Content-Type": "text/html"}); 4 response.write("Hello World"); 5 response.end(); 6 }).listen(8080); 7 console.log("nodejs start listen 8080 port!");
而後用命令行進入該目錄,執行node demo.js,即看到以下效果:
不難發現用簡單的幾行js代碼就建立了一個http服務器,相似apache、tomcat的功能。如今就應該對NodeJS有了個初步認識。
GULP的安裝與使用
定義:官方的解釋爲基於文件流的構建系統,就是對文件進行一系列的二次加工(如代碼的壓縮等,英文含義爲一大口,狼吞虎嚥,形象地暗示還能作不少事情)。gulp是一個命令,實質上就是Nodejs寫的一個小工具。
安裝前準備:在apache根目錄中新建一個test空目錄(D:\wwwroot\test),用cmd進入這個目錄,並執行以下命令:
npm install -g gulp
-g參數表示全局安裝,默認安裝目錄爲C:\Users\Administrator\AppData\Roaming\npm。如圖所示表示安裝成功。
分析下gulp的本質:在安裝目錄中,就能看到這兩個文件,功能就是用node執行一個nodejs代碼。
上面%~dp0表明批處理所在的目錄,也就是C:\Users\Administrator\AppData\Roaming\npm,繼續找到上面的gulp.js文件。
原來gulp就是用nodejs寫的一個工具,來實現文件流的管理。
繼續安裝相關工具,先輸入下面命令,後面再解釋爲何要這樣寫,不用硬記。
npm install --save-dev gulp gulp-uglify gulp-minify-css gulp-concat gulp-uglify gulp-rename gulp-less gulp-sass
其中--save-dev表示安裝在當前目錄(D:\wwwroot\test),安裝順利完成就能看到自動生成了這些文件夾和對應代碼。
這些gulp開頭的目錄就是它的工具集,下面就用它們來完成咱們的自動化工做。
準備工做基本完成,如今開始配置,讓一個簡單的自動化操做運轉起來!
回到D:\wwwroot\test目錄,新建2個目錄,src用於存放項目全部源碼,target用於存放最終發佈的代碼,再建一個gulpfile.js文件(至關於linux上的Makefile,固定名字)。而後向gulpfile.js文件中寫入下面代碼:
1 var gulp = require('gulp'); 2 var less = require('gulp-less'); 3 var minifycss = require('gulp-minify-css'); 4 var concat = require('gulp-concat'); 5 var uglify = require('gulp-uglify'); 6 var rename = require('gulp-rename'); 7 var tinylr = require('tiny-lr'); 8 var server = tinylr(); 9 var port = 1234; 10 11 gulp.task('default', function() { 12 13 }); 14 15 gulp.task('css', function() { 16 return gulp.src('src/*.css') //壓縮的文件 17 .pipe(gulp.dest('target/css')) //輸出文件夾 18 .pipe(minifycss()); //執行壓縮 19 }); 20 21 gulp.task('js', function() { 22 return gulp.src('src/js/*.js') 23 .pipe(concat('main.js')) //合併全部js到main.js 24 .pipe(gulp.dest('target/js')) //輸出main.js到文件夾 25 .pipe(rename({suffix: '.min'})) //rename壓縮後的文件名 26 .pipe(uglify()) //壓縮 27 .pipe(gulp.dest('target/js')); //輸出 28 }); 29 30 // 監放任務 運行語句 gulp watch 31 gulp.task('watch',function(){ 32 server.listen(port, function(err){ 33 if (err) { 34 return console.log(err); 35 } 36 37 // 監聽css 38 gulp.watch('./src/scss/*.scss', function(){ 39 gulp.run('css'); 40 }); 41 42 // 監聽js 43 gulp.watch('./src/js/*.js', function(){ 44 gulp.run('js'); 45 }); 46 47 }); 48 49 });
代碼一開始就是一大堆變量的申明,其中require("module")就是nodejs加載模塊的函數,module爲模塊名,其路徑能夠是相對,也能夠是絕對路徑。由此得出,前面的npm install其實就是安裝這裏須要的模塊。
體驗成果:執行該命令gulp watch,表示啓動監聽這個任務規則,其中"watch"相似Makefile中的目標規則,所以,也可單獨執行gulp css表示把css壓縮到target目錄,若是不帶參數,則默認執行"default"規則。激動人心的時刻即將到來!
這樣,gulp就已經在自動監聽咱們的相關行爲,並可自動完成一系列事情了。
體驗:在目錄D:\wwwroot\test\src\js中新建test.js,隨便寫一段代碼,保存,gulp就能實時監聽到,在D:\wwwroot\test\target\js目錄生成一份壓縮過的main.min.js文件。
經過修改配置文件,還能監聽全部文件的變化,而後執行相關的操做。
BrowserSync同步調試
隨着移動終端的普及,html5的開發已不只僅侷限於單一設備,尤爲是響應式的應用,多設備兼容調試,若是再用傳統的方式,可能會顯得力不從心,因而前人爲咱們尋找了一種一勞永逸的模式。有了上面的基礎,就能夠實現前言中動畫所展現的效果了。
首先是安裝。中途可能報錯,能夠暫時無論。
npm install -g browser-sync
部署:在D:\wwwroot\gulp_test\src目錄中建一個index.html文件,而後cmd命令在該目錄(D:\wwwroot\gulp_test\src)執行下面命令。
browser-sync start --server --files "css/*.css"
這樣就自動啓動一個http服務器,端口默認3000,如今就能夠調試靜態代碼了。在瀏覽器中輸入http://localhost:3000便可訪問剛新建的index.html文件,跟在apache中同樣的效果。只要修改css文件,效果就會實時同步到瀏覽器中,省去手動反覆刷新的繁瑣過程。不只如此,還支持多個瀏覽器,多臺移動設備(如android手機、iphone、pad等)的同步,而且在其中一個瀏覽器中操做,全部動做與輸入輸出也會被同步到全部其餘設備(見前言動畫),因此儘管一邊開發一邊觀察下效果就行了。
若是電腦已部署apache環境,同時還想調試後臺語言(如php等),則須要用代理模式啓動監聽服務。
browser-sync start --proxy "bs.test.com" --files "css/*.css"
其中bs.test.com已綁定host到本機ip。而後一樣訪問http://localhost:3000/(其餘局域網須要經過ip訪問)便可看到:
此時看到的其實是apache的站點了,由於browser-sync作了反向代理(跟nginx和apache的反向代理同樣)。這樣就能夠把實時同步的功能整合到本身的php環境中了。
可是每次也要執行這個命令來啓動監聽服務,彷佛也很麻煩,下面看下怎樣加到前面提到的gulp watch中,讓一個命令搞定全部自動化。回到D:\wwwroot\test目錄,編輯gulpfile.js文件,加入黃色背景的代碼,就能實現上面單獨執行broswer-sync命令的效果。
1 var gulp = require('gulp'); 2 var less = require('gulp-less'); 3 var minifycss = require('gulp-minify-css'); 4 var concat = require('gulp-concat'); 5 var uglify = require('gulp-uglify'); 6 var rename = require('gulp-rename'); 7 var tinylr = require('tiny-lr'); 8 var server = tinylr(); 9 var port = 1234; 10 11 // browser-sync 12 var browserSync = require('browser-sync'); 13 14 gulp.task('default', function() { 15 16 }); 17 18 gulp.task('css', function() { 19 return gulp.src('src/*.css') //壓縮的文件 20 .pipe(gulp.dest('target/css')) //輸出文件夾 21 .pipe(minifycss()); //執行壓縮 22 }); 23 24 gulp.task('js', function() { 25 return gulp.src('src/js/*.js') 26 .pipe(concat('main.js')) //合併全部js到main.js 27 .pipe(gulp.dest('target/js')) //輸出main.js到文件夾 28 .pipe(rename({suffix: '.min'})) //rename壓縮後的文件名 29 .pipe(uglify()) //壓縮 30 .pipe(gulp.dest('target/js')); //輸出 31 }); 32 33 // 監放任務 運行語句 gulp watch 34 gulp.task('watch',function(){ 35 server.listen(port, function(err){ 36 if (err) { 37 return console.log(err); 38 } 39 40 // 監聽css 41 gulp.watch('./src/scss/*.scss', function(){ 42 gulp.run('css'); 43 }); 44 45 // 監聽js 46 gulp.watch('./src/js/*.js', function(){ 47 gulp.run('js'); 48 }); 49 50 }); 51 52 // 實時同步到瀏覽器 53 browserSync.init(['target/css/*', 'target/js/*', 'target/*.*'], { 54 /* 靜態服務 55 server: { 56 baseDir: "target" 57 } 58 */ 59 60 // 代理模式 61 proxy: "bs.test.com" 62 }); 63 64 });
而後在該目錄中執行gulp watch,自動化響應式調試環境就搭好了,盡情體驗它爲咱們帶來的方便吧!
Bower簡介
bower是js依賴管理工具,能自動幫咱們下載適合版本的js庫,如jquery、bootstrap等。
安裝:經過npm安裝。
npm install -g bower
使用:進入D:\wwwroot\test\src目錄,以安裝jquery與bootstrap爲例,依次輸入命令。
bower install jquery bower install bootstrap
成功後就能在D:\wwwroot\test\src目錄中自動生成bower_components目錄,裏面又有jquery和bootstrap2個目錄,這就是bower幫咱們下載的源碼,就能夠直接在本身的工程中使用。若是想升級,執行bower update,想卸載,執行bower uninstall jquery或bower uninstall bootstrap便可。更命令可參考官方文檔。
AngularJS簡介
AngularJS是一個js框架,它能提供模板、數據綁定和UI組件以及單元測試,爲開發帶來很大的方便,同時因爲大部分工做能夠交給前端處理,這樣減輕了服務器端的壓力。固然,任何事物都有利有弊,若是用AngularJS開發的話,因爲大部分html元素都是js輸出,同時它會綁定大量監聽事件,致使性能降低。並且不利於SEO優化,所以,要根據實際狀況選用。下面簡單瞭解下,會用便可。
安裝:進入D:\wwwroot\test\src經過bower安裝,在項目中就能夠直接引用bower_components\angular\angular.min.js這個文件。
bower install angularjs
下面簡單演示幾個最經常使用的功能
一、指令
二、數據雙向綁定
三、模板(相似artTemplate、jade等前端模板)
四、MVC(引入後端語言的MVC概念)
五、依賴注入(引入java中的概念)
指令
AngularJS特有的DOM屬性,簡單理解爲ng-前綴的屬性,如ng-model、ng-bind、ng-init...
數據雙向綁定
1 <!--注意地方:能夠不寫,但必定要有ng-app屬性表示做用域--> 2 <div ng-app=""> 3 <script src="bower_components/angularjs/angular.min.js"></script> 4 <select ng-model="sex"> 5 <option value="male">男</option> 6 <option value="female">女</option> 7 </select> 8 <p ng-bind="sex"></p> 9 10 <p>姓名:<input type="text" ng-model="name"></p> 11 <p ng-bind="name"></p> 12 </div>
操做表單控件時,對應的值當即呈現到了頁面上,該功能用於表單驗證之類的功能很方便。更多用法參考官方文檔。
模板
index.html
1 <script src="bower_components/angularjs/angular.min.js"></script> 2 3 <div ng-app="" ng-init="points=[1,15,19,2,40]"> 4 <!--數組--> 5 <p>points[3] = {{ points[2] }}</p> 6 7 <!--循環--> 8 <li ng-repeat="x in [1,2,3]"> 9 {{ x }} 10 </li> 11 </div>
這裏只展現簡單的用法,有個初步的印象,更多的請查閱相關文檔。
MVC
index.html
1 <a href="#news">新聞中心</a> 2 3 <!--ng-app表示MVC做用域--> 4 <div ng-app="myapp"> 5 <div ng-view><!--這裏是顯示模板的地方--></div> 6 </div> 7 8 <script src="bower_components/angularjs/angular.min.js"></script> 9 <script src="bower_components/angular-route/angular-route.min.js"></script> 10 <script> 11 var app = angular.module('myapp', ['ngRoute']); 12 13 // 模板與控制器映射 14 app.config(['$routeProvider',function ($routeProvider) { 15 $routeProvider 16 .when('/news', { 17 templateUrl: 'list.html', 18 controller: 'NewsControl' 19 }) 20 .when('/news/:id', { 21 templateUrl: 'detail.html', 22 controller: 'NewsListControl' 23 }) 24 .otherwise({ 25 //redirectTo: '/list' 默認跳轉到 26 }); 27 }]); 28 29 // 控制器 30 app.controller('NewsControl',function($scope) { 31 console.log('新聞列表'); 32 }); 33 34 app.controller('NewsListControl',function($scope, $routeParams) { 35 //$scope爲模板對象,$routeParams爲接收的參數對象{"id": "10"} 36 $scope.news_id = $routeParams.id; 37 }); 38 </script>
list.html
1 <ul> 2 <li ng-repeat="id in [1, 2, 3 ]"> 3 <a href="#/news/{{ id }}"> 新聞{{ id }}</a> 4 </li> 5 </ul>
detail.html
1 新聞{{news_id}}的詳細內容。
注意上面黃色背景的地方不能遺漏。MVC中的路由已單獨模塊的方式加載,使用前須要bower install angular-route。運行下效果以下,注意地址欄#號後面的變化,就是對應路由調用的對應控制器。
依賴注入
依賴注入在AngularJS中很廣泛。通常用在控制器和工場方法中,一般寫法以下。詳細參見官方文檔http://www.angularjs.cn/A00z。
1 //控制器 2 someModule.controller('MyController', ['$scope', 'dep1', 'dep2', function($scope, dep1, dep2) { 3 $scope.aMethod = function() { 4 } 5 }]); 6 7 //工廠方法 8 angular.module('myModule', []). 9 config(['depProvider', function(depProvider){ 10 }]). 11 factory('serviceId', ['depService', function(depService) { 12 13 }]). 14 directive('directiveName', ['depService', function(depService) { 15 16 }]). 17 filter('filterName', ['depService', function(depService) { 18 19 }]). 20 run(['depService', function(depService) { 21 22 }]);
html5真機調試
之前在開發移動站點時,不免要在真機上調試。一直比較頭疼的問題是不能審查頁面元素、不能看到cookie、不能跟蹤js等一系列問題。但隨着需求的加強,google已解決了這個問題。
準備:chrome瀏覽器PC端最新版,USB數據線,android手機,能上google的網絡環境(重要,不然會無限風火輪)。
步驟:手機與PC相連,開啓USB調試模式,安裝好驅動,先在手機上打開chrome瀏覽器,再在PC上打開chrome,輸入chrome://inspect/#device。
點inspect便可真機調試,若是PC上一直出不出源碼,就是由於被牆了,自行解決。有個這個功能後,開發與測試都很方便,全部按F12的功能跟PC版同樣。
資源加載時間線
cookie
控制檯
Laravel安裝(windows環境)
Laravel框架是用composer(php包管理工具)管理代碼的,因此安裝前須要安裝composer(固然也能夠在官方網站上下載Laravel完整代碼包)。
Composer安裝:到http://www.phpcomposer.com/下載windows版的安裝包,執行。
設置php的路徑。
添加php與composer的路徑到系統變量的path中。
php.ini中須要打開php_openssl.dll擴展。
composer安裝完成。
下載laravel基礎包,解壓到web目錄(G:\wwwroot\gulp-proj\src\laravel-master)
已有一部分基礎代碼,可是不完整,還不能運行。而後在當前目錄執行composer install下載框架須要的其餘文件(包),耐心等待完成安裝。完成後會發現目錄中多了個vendor目錄和composer.lock文件。而後在瀏覽器訪問public對應的地址(生產代碼目錄)便可看到歡迎畫面。
嘗試開發:特別提醒,項目目錄中有一個artisan文件,它是用php寫的一個項目管理工具,能夠用它快速的建立控制器、數據填充、數據庫導入或遷移等。使用方法也很簡單,如:
php artisan generate:model article
意思是建立一個名爲article的模型,實際是自動生成這個文件app/models/Article.php,更多操做可參考http://lvwenhan.com/laravel/398.html,再也不贅述。
完!