摘要:當(dāng)然需要的工具不只有這些,其他的一些可選工具還有文件壓縮壓縮時(shí)用到的文件重命名檢查一般編輯器自帶校驗(yàn)提示工具等等,具體根據(jù)項(xiàng)目需要安裝。
gulp
前端自動(dòng)化構(gòu)建工具
需要配置nodejs環(huán)境, 利用npm安裝全局gulp,安裝后可以輸入gulp指令。
npm install gulp -g
創(chuàng)建項(xiàng)目目錄、初始化npm包、gulp
npm init gulp init
下載gulp插件gulp-connect、gulp-concat這兩個(gè)插件一個(gè)用于創(chuàng)建web靜態(tài)服務(wù)器,另一個(gè)用于文件合并。
這里的各種插件一種是用npm安裝,另一種是用前端的包管理器bower替代npm。
npm install --D gulp npm install --D gulp-connect npm install --D gulp-concat
當(dāng)然需要的工具不只有這些,其他的一些可選工具還有文件壓縮gulp-uglify、壓縮時(shí)用到的文件重命名gulp-rename、js檢查gulp-jshint(一般編輯器自帶js校驗(yàn))、gulp-notify提示工具等等,具體根據(jù)項(xiàng)目需要安裝。
編輯gulpfile.js文件用于配置gulp啟動(dòng)
/* * @Author: mikey.chishengqi * @Date: 2017-03-29 09:46:33 * @Last Modified by: mikey.chishengqi * @Last Modified time: 2017-03-29 21:49:53 */ var gulp = require("gulp"), connect = require("gulp-connect"), concat = require("gulp-concat"), //proxy = require("http-proxy-middleware"); //代理中間件 the middleware of proxy //connect任務(wù)開(kāi)啟一個(gè)web調(diào)試服務(wù),訪問(wèn)http://localhost:8080 gulp.task("connect", function () { connect.server({ port: 8080, livereload: true, middleware: function(connect, opt) { return [ // https://github.com/senchalabs/connect/#use-middleware function cors(req, res, next) { res.setHeader("Access-Control-Allow-Origin", "*") res.setHeader("Access-Control-Allow-Methods", "*") next() } ] } }); }); //allJs任務(wù),執(zhí)行合并js任務(wù) gulp.task("allJs", function () { //合并數(shù)組中所有的js文件為all.js放入www文件夾中 return gulp.src(["Content/app/*/*.js","Content/common/*.js"]) .pipe(concat("all.js")) //該任務(wù)調(diào)用的模塊 .pipe(gulp.dest("dist/js")) .pipe(rename({suffix:".min"})) //重命名 .pipe(uglify()) //壓縮 .pipe(gulp.dest("dist/js")) //輸出 .pipe(notify({message:"all task ok"})); //提示 }); //reload任務(wù),在執(zhí)行reload之前先執(zhí)行allJs和sass任務(wù) gulp.task("reload", ["allJs"], function () { //刷新web調(diào)試服務(wù)器 return gulp.src(["Content/app/"]) .pipe(connect.reload()); }) //watch任務(wù),開(kāi)啟一個(gè)監(jiān)控 gulp.task("watch", function () { //監(jiān)控?cái)?shù)組中文件的修改,如果有修改則執(zhí)行reload任務(wù) gulp.watch(["Content/css/*.css", "Content/app/app.js", "Content/app/*/*.js", "Views/*/*.html"], ["reload"]); }); //定義默認(rèn)的gulp任務(wù),直接執(zhí)行g(shù)ulp即可啟動(dòng)default,啟動(dòng)default前啟動(dòng)connect和watch任務(wù) gulp.task("default", ["watch","connect","allJs"]);
至此就創(chuàng)建出了localhost:8080的靜態(tài)服務(wù)器 ,剩下的就是需要處理前端的http請(qǐng)求。
mock生成隨機(jī)數(shù)據(jù),攔截 Ajax 請(qǐng)求
對(duì)于項(xiàng)目中所有的ajax請(qǐng)求進(jìn)行攔截,返回配置的數(shù)據(jù);這樣不用等后端接口,前端即可進(jìn)行測(cè)試;
需要引用mock.js文件和配置文件json.js;如下定義即可隨即生產(chǎn)規(guī)定字段的數(shù)據(jù);
//json.js Mock.mock( "UserMange/UserLogin", [{ "userName": "@name", //模擬名稱 "age|1-100": 100, //模擬年齡(1-100) "color": "@color", //模擬色值 "date": "@date("yyyy-MM-dd")", //模擬時(shí)間 "url": "@url()", //模擬url "content": "@cparagraph()" //模擬文本 }] ) //或者直接輸出 Mock.mock( "PicRotation/GetMasterPagePicList", { "dataResult": [], "total": 0, "IsSuccess": true } )json-server
這款工具可以搭建出RestAPI服務(wù)器;需要在gulp搭建的服務(wù)器中做跨域代理的處理;將gulp搭建的web服務(wù)器中所有ajax請(qǐng)求跳轉(zhuǎn)到j(luò)son-server搭建的RestAPI服務(wù)器;但有個(gè)坑,無(wú)法針對(duì)post請(qǐng)求做回傳處理,所有post請(qǐng)求只會(huì)在json-server定義的json文件里做添加處理(所以建議用mock),另外此插件需要安裝 http-proxy-middleware 代理插件;并且修改gulp中的middleware屬性的配置。
nodejs需要注意的是mock.js與angular之間會(huì)存在兼容問(wèn)題,因?yàn)閍ngular封裝的$http采用的是promise形式的,所以當(dāng)發(fā)起$http.get請(qǐng)求的時(shí)候會(huì)沒(méi)有響應(yīng)。mock.js需要采用angular兼容版本angular-mock.js。
nodejs作為服務(wù)端語(yǔ)言它與傳統(tǒng)c和java搭建服務(wù)器方式的不同,它不需要依賴iis或者tomcat,它通過(guò)自身封裝的httpserver模塊不到10行代碼即可搭建出需要的靜態(tài)服務(wù)器。
其實(shí)gulp中的插件gulp-connect的原理就是利用nodejs的httpserver模塊實(shí)現(xiàn)的。所以另外一種實(shí)現(xiàn)前端自動(dòng)化的方式就是直接寫(xiě)nodejs代碼;利用express框架和各種中間件可以快速構(gòu)建出一個(gè)涵蓋服務(wù)端基本所需的服務(wù)器;并且可以利用里面的路由方便創(chuàng)建出一個(gè)restapi服務(wù);但是這帶來(lái)的麻煩就是作為一個(gè)前端工程師在寫(xiě)前端的同時(shí)還要寫(xiě)服務(wù)端的代碼,相當(dāng)于做了兩份工作,增加了前端開(kāi)發(fā)的負(fù)擔(dān)。
目前我自己按照第一套的流程成功在自己本地搭建了開(kāi)發(fā)環(huán)境,整個(gè)流程比較麻煩的一點(diǎn)是,由于請(qǐng)求數(shù)比較多,所以需要編寫(xiě)的mock數(shù)據(jù)很多,另外數(shù)據(jù)的格式需要已知。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84109.html
摘要:簡(jiǎn)稱是公司內(nèi)部的混合語(yǔ)言數(shù)據(jù)標(biāo)準(zhǔn),他們用于系統(tǒng)和持續(xù)數(shù)據(jù)存儲(chǔ)系統(tǒng)??捎糜谕ㄓ崊f(xié)議數(shù)據(jù)存儲(chǔ)等領(lǐng)域的語(yǔ)言無(wú)關(guān)平臺(tái)無(wú)關(guān)可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式。我們想要的結(jié)果是最終的返回的數(shù)據(jù)。如果當(dāng)前開(kāi)發(fā)開(kāi)啟,就回直接返回?cái)?shù)據(jù)。數(shù)據(jù)是與同級(jí)的文件。 Protobuf Google Protocol Buffer( 簡(jiǎn)稱 Protobuf) 是 Google 公司內(nèi)部的混合語(yǔ)言數(shù)據(jù)標(biāo)準(zhǔn),他們用于 RPC ...
摘要:如何去解決這些問(wèn)題前后端分離大部分的互聯(lián)網(wǎng)公司都分成了前端團(tuán)隊(duì)和后端團(tuán)隊(duì)。方案一采用架構(gòu)業(yè)界很多公司會(huì)采用,單頁(yè)應(yīng)用的架構(gòu),這種架構(gòu)是天然的前后端分離的。方案二淘寶的大前端方案中途島上圖是淘寶基于的前后端分離分層,以及的職責(zé)范圍。 我們遇到了什么問(wèn)題? 1.前端無(wú)法調(diào)試后端未完成的 API:如果后端同學(xué)還沒(méi)有完成 API 開(kāi)發(fā),那么前端同學(xué)就不能對(duì)這個(gè) API 進(jìn)行開(kāi)發(fā)。之前我們都是在...
摘要:為了使得前端減輕對(duì)后端的依賴,在后端功能尚未實(shí)現(xiàn)的情況下保證前端進(jìn)度的開(kāi)發(fā),我們一般會(huì)手動(dòng)進(jìn)行一些數(shù)據(jù)模擬,即假數(shù)據(jù)。覆蓋攔截請(qǐng)求,目前內(nèi)置支持。 序 有時(shí)候我們開(kāi)發(fā)一般會(huì)分為前后端,前端負(fù)責(zé)數(shù)據(jù)顯示和UI交互,后端負(fù)責(zé)數(shù)據(jù)IO等等。因此造成前端對(duì)后端有嚴(yán)重依賴,使得前端的開(kāi)發(fā)進(jìn)度普遍滯后于后端。 為了使得前端減輕對(duì)后端的依賴,在后端功能尚未實(shí)現(xiàn)的情況下保證前端進(jìn)度的開(kāi)發(fā),我們一般會(huì)手...
摘要:為了使得前端減輕對(duì)后端的依賴,在后端功能尚未實(shí)現(xiàn)的情況下保證前端進(jìn)度的開(kāi)發(fā),我們一般會(huì)手動(dòng)進(jìn)行一些數(shù)據(jù)模擬,即假數(shù)據(jù)。覆蓋攔截請(qǐng)求,目前內(nèi)置支持。 序 有時(shí)候我們開(kāi)發(fā)一般會(huì)分為前后端,前端負(fù)責(zé)數(shù)據(jù)顯示和UI交互,后端負(fù)責(zé)數(shù)據(jù)IO等等。因此造成前端對(duì)后端有嚴(yán)重依賴,使得前端的開(kāi)發(fā)進(jìn)度普遍滯后于后端。 為了使得前端減輕對(duì)后端的依賴,在后端功能尚未實(shí)現(xiàn)的情況下保證前端進(jìn)度的開(kāi)發(fā),我們一般會(huì)手...
項(xiàng)目開(kāi)始前,我們先聊一聊關(guān)于項(xiàng)目的一些說(shuō)明。該項(xiàng)目起始于2017年初,當(dāng)時(shí)公司主要技術(shù)棧為gulp+angular,鑒于react的火熱的生態(tài),在公司決定研發(fā)bss管理系統(tǒng)時(shí)選用react開(kāi)發(fā),目的也是為react native打下基礎(chǔ),以解決后期公司大前端技術(shù)棧的逐步成熟。(當(dāng)時(shí)沒(méi)有選擇vue開(kāi)發(fā)的主要原因是weex生態(tài)還不夠特別成熟),既然決定換新,項(xiàng)目的構(gòu)建也跟著一起換,從gulp轉(zhuǎn)向火熱的...
閱讀 1751·2021-10-18 13:34
閱讀 3946·2021-09-08 10:42
閱讀 1584·2021-09-02 09:56
閱讀 1632·2019-08-30 15:54
閱讀 3158·2019-08-29 18:44
閱讀 3327·2019-08-26 18:37
閱讀 2245·2019-08-26 12:13
閱讀 488·2019-08-26 10:20