前端新手如何用Vuejs一週打造電商後台(1)

最近因工作需要,必須打造一個web-based的電商後台,具體功能包括
商品發佈、圖片壓縮上傳、使用者登入、分頁管理、出貨管理...等等。

由於小弟並非前端程序猿,不常寫js,更是第一次寫ES6,然站在巨人們的肩膀上,最終也只用一週多的時間完成任務,一路上學到很多,體驗到學前端的樂趣,同時也走過一些坑,僅此紀錄,幫助自己也希望幫助別人。

先上結果

商品列表
新增/編輯

整個project技術棧為:

  • 前端: Vuejs + Vue-Router + eleme UI + ES6(with Babel) + Webpack
  • 後端: Nodejs + Express + MySQL + Coffeescript

功能描述

  1. 商品列表可在列表狀態下直接編輯分類欄位
  2. 新增/修改商品:應用modal/selector/switch/text/tooltip等基本UI元件,在不轉跳頁面情況下編輯商品內容。
  3. 瀏覽器直接上傳圖片至s3,無需經過backend server,並自動產生縮圖。以及實現排序/刪除。
  4. 登入/登出/記得我等功能。
能學到什麼?
  • 從實作商品列表學到async request撈資料、處理分頁、深度使用table。
  • 新增/修改商品學到form的各種填入、validation、以及更多的UI元件。
  • 圖片處理學到如何用canvas產生縮圖、理解亞馬遜的各種機制包括IAM、Cognito、s3 CORS、endpoint、certificate等各種設定,並使用aws-sdk從瀏覽器直接上傳圖片。這部分是最頭痛也最難搞的!
  • 登入/登出系統學到基本加密傳輸、server端驗證、埋token,自動登入用到瀏覽器端local storage...等等。

選擇前端框架: Vuejs vs React

框架的選擇上,只考慮ReactJSVuejs,Angular 2.0不考慮。理由是ReactJS能透過ReactNative跨到移動端,而Vuejs同樣可能透過Weex跨到原生移動端,光這點就足以淘汰Angular了。即使目前我只需要web後台,但考慮到未來的延展性,React跟Vue遠勝Angular。

至於React跟Vue到底該怎麼選?網路上已有許多討論,兩者同樣都是優秀的前端框架,React在github上5.4萬顆星,vuejs則是3.4萬顆星,考慮到vuejs比較晚發展,這成績可以說是旗鼓相當。兩者的社群都非常活躍,開源組件目皆不暇給,例如Vue的Element(PC端)、Mint UI(移動端),以及Vux(類微信),以及更多在Awesome Vue Projects

兩者都是focus在view層面的處理,不一樣的是,Vue擁抱HTML,而React則擁抱Javascript。這話該怎麼理解呢?以iOS來譬喻的話,就是頃向於用xib或storyboard來刻view,邏輯才用code來實作;以Android來比喻的話,就是用xml來刻view,邏輯才用code來實作。不管是iOS的xib還是Android的xml,都是view模板的概念,Vuejs正是基於此概念。

而React更偏向全都用js code來寫view,如果你喜歡用code生成view的話,或許React會是更好的選擇。最佳使用React的方式是寫jsx,一種模板內嵌的js。由於js原來就不是設計來寫view模板的,為了讓js更方便寫view,還因此搞了一個jsx的語法。

在mobile端,我個人喜歡用模板的方式去寫view,iOS跟Android都是。這樣程式碼更乾淨,也能夠更直觀地展現view。所以在前端,我依循此邏輯,最終選擇了vue。另一部分也因為它結構似乎更優雅,而我對優雅的事物是沒什麼抵抗力的。值得注意的是,用模板的方式寫view,不代表不能用code處理view,事實上vue也支援用jsx刻view,但我從沒用過。

於是就開啟了我的Vue學習之路。

附帶一提,Vue作為快速崛起的後起之秀,甚至獲得阿里團隊的青睞,他們基於vue之上打造weex框架,試圖一次coding搞定web+原生iOS/Android。不過這不是今天的重點,就不展開了。

這麼強大的Vue,如果有人說他比jQuery還好學,你相信嗎?根據我自己這一兩週的體驗,確實不困難,相較於iOS/Android簡單多了。

選擇後端框架

後端我就直接採用了熟悉的Nodejs+Express+MySQL+Coffeescript,由於本文主要討論前端學習過程,這部分就不展開了。

基礎篇

所有學習資料中,最重要的兩份文檔,莫過於官方的指南以及Vue-Router,這兩個連結請直接打開並放在瀏覽器前兩分頁,估計你一週內都不會關閉它們。

建議先從頭到尾瀏覽過一次指南,前面的概念都很容易懂,其中Vue實例組件單文件組件必須詳看。這份指南寫得很棒,但有一個小問題,文件裡面的範例,幾乎都是用js生成Vue實例,然而真正在開發專案時幾乎都是用.vue檔(單文件組件)去生成Vue實例,而.vue檔的語法跟js有些微不同,老實說我也不知道為何要如此設計,對於剛入門的新手可能會覺得有點卡,但這其實兩者是同一回事,需要小心語法差異。

讀完了基礎文件之後,務必看兩個真實project。其一為Vue.js+LeanCloud单页面博客,僅用兩個組件,不到一兩百行的核心代碼就實現了Single Page Blog,非常經典。其二是Hackernews Clone,看看如何用Vue輕鬆山寨hackernews。比較需要注意的是,Hackernews Clone用的是vue1.x的版本,有些語法或config會不太一樣,但是整體的架構還是可以學習的。務必把這兩個範例,從github上拉下來,整份讀,不一定要run起來,但是要試圖去理解文件的架構,尤其是各種config檔,這些細節指南是不會告訴你的。

以上資料,大約會花你一至兩天時間。

看完這些文件後,對於資料綁定、路由、組件、asyn操作相信都有了基礎的認識。準備好跨出第一步吧!

webpack, babel, eslint

且慢!在你踏進去第一步之前,必須先大致搞懂這三個名詞,有點複雜我知道,但相信我,這時間值得你投資。

我簡單說明一下:

  • webpack: 將開發時所用到的許多檔案(HTML, css, sass, scss, .vue, .coffee, jade...等等),包括套件的相依引用,通通打包成一個檔案。最後輸出成一個檔案例如build.js,只需要載入這一個就搞定了。有點像是C++ compile程式碼,最後變成一個執行檔的概念。
  • Babel: 讓看不懂ES6的瀏覽器讀懂你寫的ES6。其實就是一個轉譯。
  • ESLint: 由於JS本身語法設計上的問題,容易寫出bug。這工具就是在幫你檢查由coding style可能產生潛在bug。

**什麼時候需要用webpack? **

如果你用.vue寫component,
如果你想用sass, scss等高階css框架
如果你想用jade

所以,基本上你會發現大家都用webpack,既然如此必須要特別留意webpack.config.js,裡面詳細描述了各種文檔需用什麼工具去轉譯。如果用vue-cli啟動project的話,會自動幫你件好一個基礎的webpack設定,大多時候你不太需要更動它。但有許多npm套件需要轉譯.json檔,如果你會用到的話,記得告訴webpack

// ps. 有些舊版webpack的loader名稱,後綴不加"-loader"
rules: [
  ...
  {
    test: /\.json$/, 
    loader: "json-loader"
    // exclude: /node_modules/
  }
]

//package.json
"json-loader": "^0.5.4"

vue-cli

啟動project前,請先去安裝vue-cli,先用別人的best practice搭建一個框架,暫時先在框架內學習基本套路。vue-cli是vuejs作者開發的一套工具,他發現許多新手的vue問題根本就不是vue問題,而是把webpack、vue、babel、各種loader等阿哩阿雜工具「串起來」的設定問題。於是開發了一套小工具,迅速幫你搭好一個可立即運行的框架,以便新手跳坑。vue-cli能幫你搭建許多種框架,有非常完整的,也有非常簡單的,建議先搭建一個最簡單的版本開始,完整版的框架對新手而言(例如我)非常複雜,令人一開始就會陷入為了要寫個小project得先學會A、B、C、D、E、F...等前置知識,直接死在起跑點。

啟動

未完待續

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容

  • 为何叫做 shell ? shell prompt(PS1) 与 Carriage Return(CR) 的关系?...
    Zero___阅读 3,133评论 3 49
  • 原来我非不快乐 始2016.6.27 聽說,能到達金字塔頂端的只有兩種動物,一是雄鷹,靠著自己的...
    _行走中的蝸牛_阅读 1,490评论 1 8
  • 隨筆1-24(2015.6-10) 1、作者 才華不是財富,痛苦不是財富,用才華對痛苦進行思考和表達才是。於是有了...
    四葉阅读 1,475评论 3 14
  • JennyGump阅读 198评论 0 0
  • 慕子自然没有拒绝,她相信他,不会是个网络骗子,从他在网上的言语即可看出。 后来两人见面了,带着羞涩和陌生,有一搭没...
    婷子酱阅读 169评论 0 2