前端部分之code位於範例專案中之\Frontend資料夾裡

開新專案

以下介紹本範例前端部分是怎麼建立的

vue create your-project-name

當前面安裝好vue cli後,這邊就可以使用cli輔助建立專案了

開啟command line執行

vue create your-project-name

以下是本範例專案選擇的選項:

  • 1
    • 選擇手動選擇功能
  • 2
    • Router: 選擇後預設安裝好router的相關設定
    • CSS Pre-processors: 選擇後,之後會問妳要不要使用像SCSS/SASS的東西進行開發
  • 3
  • 4
    • 當前面CSS Pre-processors有勾選後,這邊可以選擇要用什麼CSS pre-processors
  • 5
    • 這邊lint選擇比較不嚴格的模式,若選擇比較嚴格的模式,有可能會變成code必須完全符合lint規範才能執行
  • 6
  • 7
  • 8
  • 9
    • 全部設定完後,vue cli就會開始下載安裝套件到node_modules中
    • 由於node本身機制的問題,這個步驟會執行比較久(幾分鐘)

Vue cli 相關文章

用vue cli的好處是,他會幫妳做掉很多細部的設定

讓你省掉很多自己設定package.json的工

更多細節內容可以參考以下文章:

  • 官方網站
  • Vue CLI 3 安裝與使用教學
  • |D2| Vue CLI3 安裝與建立 vue 專案
  • Vue: Vue-CLI3.0 创建项目

專案結構

這邊概略介紹一下專案結構,更多有關vue專案結構的說明可以參考Vue CLI 專案結構及解析

  • /dist
    • 放置編譯後的檔案,也是實際上會跑到顧客瀏覽器去運行的檔案
  • /node_modules
    • 相依套件存放地
  • node_modules.zip
    • 若windows下載套件有問題,也可以先使用我預先下載的套件
    • 但可能會有作業系統相容性問題,建議還是用npm install來下載相依套件
  • /public
    • 公用靜態擋存放地(像是圖片)
  • /src
    • 原始碼存放地
    • 也是我們開發主要會動到的地方
    • src中之說明將會於下面的篇幅進行
  • /src-origin
    • 這是vue create project後,一開始預設的src資料夾
    • 專案中將之重新命名為src-origin後保存,讓大家可以自行比較一下差異
  • .env.development
    • 一些開發環境用全域變數可設定在此,像是後端的網址
  • .env.production
    • 一些營運環境用全域變數可設定在此,像是後端的網址
  • vue.config.js
    • 這邊可以進行vue的一些設定,像是
      • 所有的組件預設就import jquery
      • webpack的設定
      • 網頁網址的設定

開發環境

啟動

到/Frontend也就是有packages.json的目錄後,開啟command line執行

npm run serve

便可開啟一個開發用的server

此外也可以使用vue ui來啟動ui介面操作開發環境

關於vue ui,本範例不會著墨太多,更多相關內容可以參考Day29 vue.js - Vue cli 3 UI安裝介面及項目結構介紹

使用輔助開發工具

vue 本身有開發一個[輔助開發工具],在開發上有很大的幫助

像是觀察組件中之數值,這樣就不用一直console.log去看值

輔助工具本身有設計成營運環境就不能使用,但這是可以被破解的

因此機敏的東西絕對不要放前端

更多介紹的文章可以參考:

  • Vue.js devtools
  • [Vue.js] Vuex 學習筆記 (18) - 開發工具 Vue.js devtools
  • 透過 Vue-CLI 建置專案時,自動切換 devtools 的 debug 環境

開發

安裝第三方套件

一般開發時,都會使用一些成熟的第三方套件,來避免自己重複造輪子

以下介紹本專案有用到的套件(若使用node_modules.zip的話,以下套件均已被安裝)

  • vue-js-modal
    • 安裝指令: npm install -D vue-js-modal
    • 移除指令: npm uninstall vue-js-modal
    • 功能: 開起一個小視窗(當點選task時,會跳出modal顯示編輯介面)
  • vuedraggable
    • 安裝指令: npm install -D vuedraggable
    • 移除指令: npm uninstall vuedraggable
    • 功能: 讓網頁元素可以被拖曳(用來移動卡片)
  • axios
    • 安裝指令: npm install -D axios
    • 移除指令: npm uninstall axios
    • 功能: 用來呼叫restful api,跟後端溝通用

/src結構

  • /api
    • 跟後端API的介接,資料交換集中放置在此
  • /assets
    • 網頁需要用到的靜態擋放置在此
  • /components
    • 組件集中放置在此
    • VueTemplate.vue
      • 空的範例組件
    • Nav.vue
    • Board.vue
      • 包含了Todo List跟Done List
      • 可以透過props來控制此board可否編輯
    • TodoList.vue
      • Todo List跟Done List所使用到之組件
      • 裡面可以放置/移動task
      • 使用第三方套件Draggable來實現移動task
      • 可以透過props來控制此list可否編輯
    • Task.vue
      • 最基本的task組件
      • 可以觀看/編輯一個task之Title與Content
      • 可以透過props來控制此task可否編輯
  • /route
    • 當網址對應之組件比較複雜後,有些邏輯可以放到這邊,像是有些網址須要登入才可訪問,相關權限處理
  • /store
    • vuex本身有model化的用法,可以透過namespace來讓資料物件化/模組化
    • store可以放置這些物件化/模組化之js檔
  • /views
    • 這邊定義了各網址應該對應到的組件
    • NoBackendHome.vue
      • 僅能觀看task
      • 不需後端
      • 資料儲存在$store.state.localBoard,即/src/store/localBoard.js
    • NoBackendEdit.vue
      • 可以觀看/編輯task
      • 不需後端
      • 資料儲存在$store.state.localBoard,即/src/store/localBoard.js
    • Home.vue
      • 修改自NoBackendHome.vue
      • 多了從後端拿資料存進$store.state.remoteBoard的動作
      • 資料儲存在$store.state.remoteBoard,即/src/store/remoteBoard.js
    • Edit.vue
      • 修改自NoBackendEdit.vue
      • 多了從後端拿資料存進$store.state.remoteBoard的動作
      • 資料儲存在$store.state.remoteBoard,即/src/store/remoteBoard.js
    • PageNotFound.vue
      • 當網址無法對應到router中之規則時,故定回傳此組件
  • App.vue
    • 整個組件的root,原點
    • <router-view/>宣告了各網址的內容應該在此tag內進行render
  • main.js
    • 整個vue運作的原點
    • 有些第三方套件的使用必須在這邊宣告,像是Vue.use(VModal)
    • 如果專案要使用router,vuex,也必須在new Vue時傳入參數
      import Vue from 'vue'
      import App from './App.vue'
      import router from './router'
      import store from './store'
      
      // import 第三方套件
      import VModal from 'vue-js-modal'
      
      Vue.config.productionTip = false
      // 使用'vue-js-modal'這個第三方套件
      Vue.use(VModal)
      
      new Vue({
          router,
          store,
          render: h => h(App)
      }).$mount('#app')
      
  • router.js
    • 定義網址對應之組件
  • store.js
    • vuex store之root/原點

編譯(Build)

開啟command line後執行

npm run build

或者使用vue ui去啟動編譯也可以

編譯完成後,預設會將編譯完之檔案放到/dist中

而這些編譯後的檔案,也是實際上顧客瀏覽器會運行的檔案

本機開發時,瀏覽器上所運行的並不是最終實際在顧客瀏覽器上運行的檔案

而這些編譯後之檔案,將在後續文章說明怎麼部署到IIS Server上

接下來

下一篇文章,將開始後端部份的說明