① express框架怎麼用react框架作為前端框架
1.不要陷入糾結工具的怪圈我們團隊一開始用React的時候,工具棧應該是grunt+grunt-react;寫了一段時間感覺有局限,然後老大帶頭把工具換成了gulp+browserify+watchify+reactify,然後又愉快的寫了大概半年吧,發現流行的庫都上webpack了;於是我們的工具棧又變成了gulp+webpack+babel-loader。最後大家一致認為gulp是多餘的,所以我們的工具棧又圍繞webpack重新搭建了一遍。到最近我負責的一個內部項目,什麼hot-mole-replacement、extract-text-plugin(讓你在js里require('style.scss');這么寫的玩意兒)一股腦的造。當然再後來因為業務需要我們又基於webpack搭建了自己的構建工具,這是後話……這將近一年半的折騰歷史告訴大家,1)前端就是個大坑,1個月不學新知識你就會被社區遺忘2)現在上React真幸福,工具棧基本都穩定了(什麼?你還不懂?用webpack!),不用花太多時間糾結。PS.HMR也就那樣,雖然dan吹得神乎其神,但實際在項目里我發現大家還是習慣手動Cmd+R,因為項目大了以後rebuild也需要1、2秒。2.DOM操作是不可避免的但凡是上點兒規模的前端項目,沒有DOM操作基本是不可能的。且不說最常見的後端「埋點」,你總得用DOMAPI去取值吧;就說一個最簡單的,比如右手邊這個「回到頂部」的按鈕,你純用React寫一個試試。當然你會說什麼requestAnimationFrame,什麼,真正到項目里你會發現還是DOMAPI簡單。3.擁抱ES6,擁抱Reactv0.14這倆為什麼放在一起說呢?因為Reactv0.14里提出了一個全新的組件概念叫做:無狀態的函數式組件(Statelessfunctionalcomponents)。它大概長這樣:varAquarium=({species})=>({getFish(species)});有沒有發現被傳統的createClass方法精簡了很多?當然這樣寫組件也有很多局限,比如不能聲明各種生命周期方法等等,但是在常見的前端業務場景中,純render的組件不在少數。在這樣的語法推出後,我們就能把這些組件更方便的抽出來復用了。此外,擁抱ES6還有很多的好處,比如在載入依賴的時候不用先varxxx=require('xxx');再varyyy=xxx.yyy;而是可以直接import{yyy}from'xxx';簡潔明了。4.生態環境仍然在成長中,坑不少其中首先要口誅筆伐一下的就是react-router,我們從v0.10開始用,到現在v1.0。你知道為了升級這玩意兒我們改了多少次業務代碼么?每次升級API都要變,無力吐槽。當年好不容易搞懂了v0.11,在博客里寫了篇技術文章分享,結果後面的日子就是各種被催更……一個月前抽空就0.13版又重寫了一遍教程,這不1.0版又出了,API基本全都不一樣了!!不一樣了!!一樣了!!樣了!當然除了坑也有不少高質量的生態環境產品,比如螞蟻的antdesign。5.Server端渲染很美,至今沒看見哪個規模級的產品用到可能是我孤陋寡聞吧,歡迎評論中跟進。自己摸索著寫過一個最簡單的server端渲染,但是這套邏輯如果套到我們現在的業務邏輯中,幾乎可以直接槍斃。為了實現server端渲染需要做出的tradeoff太多。6.React很簡單,也很難簡單是因為React的API真的很少,官網的各種文檔花一個下午也能看個七七八八(此時此刻再看看Angular……)。但是當你以為你真的搞懂React的時候,看看React源碼剖析系列-解密setState-purerender-知乎專欄這篇文章開頭提的問題,有多少人能不假思索的答對呢?(順便安利一下,我們團隊的知乎專欄,目前處於死磕React的狀態)當你真正在業務項目中使用React的時候,你會發現它的生命周期比你想像的復雜;它的API背後的邏輯比你以為的麻煩。當然,首先你要踩進這個坑。7.對於樓上某位仁兄表示《React:引領未來的用戶界面開發框架》這本書太難的回答,作為譯者之一表示對不起你。作為補償,所有購買本書的同學均可憑拍照私信我咨詢React相關的問題。
② 如何設計一個基於Node.js和Express的網站架構
推薦使用Webstorm打開項目。打開項目後,代碼結構如下圖所示:
在主體結構中從上到下介紹。 app 文件夾包含了所有後端代碼; build 文件夾中包含了最新資料庫備份; config 包含有網站整體的配置; logs 文件夾包含網站後端記錄的日誌文件; node_moles 是包含所有的 node.js 依賴包(源代碼中初始沒有此文件夾,運行 npm install 命令後所有載入的依賴包放置在此文件夾中); public文件夾包含了所有的前端弊螞肆代碼,包括JavaScript、less、圖片、Webfont等; .bowerrc中定義了 bower 管理前端庫的下載地址; bower.json 則配置了項目需要的前端庫;.jshintre-client 和 .jshintrc-server 分別為前後端JavaScript代碼規范檢查規則;.travis.yml 為[travis](travis-ci.org/)自動編譯配置; app.js 為node.js啟動腳本文件; build.sh 為單獨編寫的自動發布bash命令;gruntfile.js為 grunt 配置文件;newrelic.js為 newrelic 的配置文件,用於監控網站性能; package.json 包含了所有node.js依賴包配置。
項目後端結構
項目後端代碼架構如下圖所示:
主要分為兩大部分: app 和 config 。 app 裡面按照職責不同來分類,每個腳本文件對應於不同的模塊; api 文件夾包含了所有api對應的業務邏輯代碼, helper 放置一些公用租轎方法,如郵件發送、日誌記錄、資料庫連接等等; templates 放置的是靜態郵件模板; views 是後端頁面模板,使用了 handlebar 模板引擎,其中 http 中放置系統錯誤顯示頁面, layouts 放置模板頁; routes 是 express 對應的路由配置,所有的頁面和API的路由配置都在這個文件中。 config 文件夾中為系統配置,按照不同環境分為開發和現場兩個環境配置, all.js 放置共通配置, development.js 放置開發環境對應配置而 proction.js 放置線上環境配置。配置內容包括郵件發送、資料庫連接及一些第三方API所需的key等等。
項目前端結構
項目前端代碼結構如下所示:
前端代碼全部放置於 public 文件夾下。 data 目錄包含一些靜態json格式數據,後期可能會考慮放到資料庫中。 helper 中是瀏覽器下載引導頁面; images 包含了所有項目中用到的圖片,我們盡量使用第三方的圖片伺服器保存圖片,一些小圖標也盡量使用webfont。 JavaScripts 文件夾包含所有JavaScript文件,其中 app 子目錄放置業務代碼,業務物行代碼都是按照業務不同封裝成了不同的 angularjs controller; debug 子目錄放置調試用代碼,而 libs 方式前端JavaScript庫,項目中使用得JavaScript庫有angularjs 、 jQuery 及一些插件; clients.js 是所有ajax請求函數; erealm.js 是angularjs的主模塊; language.js 包含了所有多語言配置,目前支持中英文。stylesheets 包含了所有的css樣式及webfont,除了第三方庫之外,自定義的樣式全部使用了 less 。作為一種慣例,項目中添加了 humans.txt 文件,表明項目的作者信息。有關humans.txt,可以參考官方網站 humans.txt 。
自動化構建工具
項目自動化構建使用 grunt 。grunt的使用涉及開發、調試、發布階段。開發階段使用了圖片壓縮和前端代碼格式美化,使用的工具是 imagemin 和 jsbeautifier ,運行grunt prepare 命令。調試階段使用了代碼規范檢查、less編譯、自動添加瀏覽器前綴、自動載入運行nodejs並打開瀏覽器、實時監控代碼變化並刷新頁面等。開發中,使用 grunt 命令即可,為默認grunt命令。發布階段包含了JavaScript及css合並壓縮,並在文件路徑上添加哈希值來避免瀏覽器緩存問題,同時刪除開發環境中使用的代碼,使用 grunt build 命令即可把代碼切換為發布環境。
具體的使用grunt方法及相關工具的介紹,後期會有專門的技術文章講解,這里不會詳細設計技術細節。
後期持續的改進點
項目完成的比較倉促,但是我們盡量保持代碼的整潔和可維護性,一些編碼方式也借鑒當前流行的最佳實踐。但理想是美好的,現實總是不會做到那麼完美,需要不斷的完善。目前存在的問題是後端代碼結構不夠清晰、整體代碼中無用代碼還沒有來得及移除。框架上期望把 jQuery 去掉,只使用 Angularjs ,目前只做到了盡量不用jQuery 中的方法。小圖標的使用上 Bootstrap 和 Font Awesome 重復,後期會逐步刪除 Font Awesome 而只使用 Bootstrap 中帶的小圖標。目前,最大的問題是項目沒有完整的自動化測試,這個後期會逐步添加。
總結
以上是這個開源項目的整體技術結構介紹。在這個項目中,我們會持續使用最流行的Web技術,希望得到大家的持續關注,如果有開發者能一塊貢獻一些代碼,我們將會非常高興。我們已經在github.io上構建了一個技術平台來發布Web技術文章,網址是blog.erealm.cn。博客網址也同樣開源,使用了 Jekyll 構建。 Jekyll 非常強大,最大的特點是使用markdown格式來發布文章。博客的代碼在這里: github 。
我們做這個開源的項目的目的有兩個,其一是通過這個項目來展示我們做Web項目的實力,及培養團隊技術水平。其二是藉助這個項目,能和同行們有個技術上的互動和交流。如果我們的項目能讓一些新手們學到一些做Web項目的經驗,我們就很知足了。技術是不斷革新的,而國內Web技術向來是落後於國外好幾年,這個是不爭的事實。我們erealm團隊樂意為國內Web貢獻自己的力量,也歡迎國內同行們和我們交流Web開發經驗。
③ 做前端需要什麼技術
想要成為一個好的前端程序員,需要掌握的技術還是比較多的,比如HTML5開發、JavaScript、Veu.js框架開發等等。
前端就是展現給用戶瀏覽的部分。我們通常說的前端,其實是指前端開發,也就是創建PC端或移動端等前端界面給用戶的過程,通過HTML,CSS及JavaScript以及衍生出來的各種技術、框架、解決方案,來實現互聯網產品的用戶界面交互。
學習的內容包括:
①計算機基礎以及PS基礎
②前端開發基礎(HTML5開發、JavaScript基礎到高級、jQuery網頁特效、Bootstrap框架)
③移動開發
④前端高級開發(ECMAScript6、Veu.js框架開發、webpack、前端頁面優化、React框架開發、AngularJS 2.0框架開發等)
⑤小程序開發
⑥全棧開發(MySQL資料庫、Python編程語言、Django框架等)
⑦就業拓展(網站SEO與前端安全技術)
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。