主頁 > 企業開發 > 淺談Vue開發最佳實踐—事項清單

淺談Vue開發最佳實踐—事項清單

2022-04-23 08:25:44 企業開發

一 、通過云開發平臺快速創建初始化應用

1.創建相關應用模版請參考鏈接:徹底學會快速部署vue框架,一篇就夠了

2.完成創建后就可以在github中查看到新增的Vue.js 倉庫

file

二 、 本地撰寫《開發跨平臺桌面應用》專案

1.將應用模版克隆到本地

● 首先假定你已經安裝了Git、node,沒有安裝請移步node官網進行安裝,克隆專案:

git clone + 專案地址

● 進入專案檔案

cd Vue.js

● 切換到feature/1.0.0 分支上

git checkout feature/1.0.0

● 使用一下命令全域安裝 Vue CLI :

npm install -g @vue/cli 

● 安裝 Vue CLI Plugin Electron Builder

vue add electron-builder

程序中會提示你選擇Electron的版本,選擇最新版本即可,

在這個程序中,由于網路的原因,Electron可能會安裝失敗,這時候如果node_modules檔案夾中已經有electron檔案夾(該檔案夾是不完整的electron包,不能運行),那么洗掉這個檔案夾,然后可以使用cnpm重新安裝electron,

cnpm i electron --S

注意,如果上面不是選擇的最新版本,這里安裝的時候需要指定版本安裝,如cnpm i [email protected] --S

● 安裝依賴包

npm install

● 啟動服務

npm run electron:serve

這里打開瀏覽器8080埠,并出現默認頁面,

2.案例效果預覽、功能分析與專案架構

● 效果預覽

file

file

file

● 功能分析

1、記錄待完成任務和已完成任務

2、通過新建,添加待完成任務,并設定時間

3、點擊完成任務,跳轉到已完成界面;點擊洗掉,可以洗掉任務

4、點擊右上角的 × 按鈕,可以關閉主界面,要再次打開主界面,可以通過系統托盤

5、設定的時間到了,會在右下角彈出提醒框,如下圖所示,

file

● 專案架構

如果你有過vue開發經驗,會發現整個專案目錄還是熟悉的配方,業務代碼放在了src檔案夾下,

渲染行程的頁面交給了vue進行渲染,開發程序和我們平時使用vue開發web頁面相差無幾,而electron主行程的代碼是放在background.js中,

file

專案支持熱更新,修改代碼后不用再手動重繪,比之前從零DIY要方便很多,我們可以更專注于業務邏輯的開發,下面就進入coding階段~~

● 專案架構分析

file

專案主要有兩個渲染行程,對應兩個頁面(main和remind),因此,這里我們采用多頁面打包的方式,

vue-cli構建的包默認是單頁面打包,所以,我們在vue.config.js中進行改造:

module.exports = { //多頁面打包
  pages: {
    main: {
      // 入口js
      entry: 'src/modules/main/main.js',
      // 模板來源
      template: 'public/main.html',
      // 在 dist 中生成的html檔案名字
      filename: 'main.html',
      // template html 中的 title 標簽需要是 <title><%= htmlWebpackPlugin.options.title %></title>
      title: 'Main Page'
    },
    remind: {
      entry: 'src/modules/remind/remind.js',
      template: 'public/remind.html',
      filename: 'remind.html',
      title: 'Remind Page'
    }
  }
}

這時候的專案目錄:

file

以main頁面為例,它的main.js和Main.vue內容如下:

● main.js

import { createApp } from 'vue'
import App from './Main.vue'
import router from '../../router'
import store from '../../store'

createApp(App).use(store).use(router).mount('#app')

● Main.vue

<template>
  <div id="nav">
    <div >{{dateStr}}</div>
    <div >
      <router-link to="/">待辦事項</router-link>
      <router-link to="/finished">已完成</router-link>
    </div>
    <router-link to="/add"><span>新建</span></router-link>
  </div>
  <div >
    <span  @click="closeMain">×</span>
    <div >
      <router-view/>
    </div>
  </div>
</template>
<script>
import { closeMain } from '../../utils/useIPC.js'
export default {
  setup () {
    const date = new Date()
    const dateStr = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`
    return {
      closeMain,
      dateStr
    }
  }
}
</script>

3.路由與狀態管理

提醒視窗(remind)的結構和資料都很簡單,這里主要分析主視窗,

● 路由

主視窗的頁面架構主要是三個Tab,分別對應三個vue組件,

file

使用vue-router的代碼如下:

// src/router/index.js

import { createRouter, createWebHashHistory } from 'vue-router'
import Todo from '../views/Todo.vue'

const routes = [
  {
    path: '/',
    name: 'Todo',
    component: Todo
  },
  {
    path: '/finished',
    name: 'Finished',
    component: () => import(/* webpackChunkName: "finished" */ '../views/Finished.vue')
  },
  {
    path: '/add',
    name: 'Add',
    component: () => import(/* webpackChunkName: "add" */ '../views/Add.vue')
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

export default router

● 狀態管理

這里的主要資料就是 待完成任務(todoArray)和 已完成任務(finishedArray),在上面三個組件中都有對這兩個資料的操作,所以使用vuex進行狀態管理,
本例中,任務資料需要使用localStorage來存盤,我們選擇vuex來管理資料,可以借助插件來完成vuex中資料的持久化,這里使用vuex-persistedstate,

import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'

export default createStore({

  // 該插件會將vuex中資料持久化
  // 可通過配置來決定哪些資料需要持久化,保存在localStorage、sessionStorage還是cookie中
  plugins: [createPersistedState()],  
  
  state: {
    todoArray: [],      //待完成任務陣列
    finishedArray: [],  //已完成任務陣列
    keepTimes: 0        //已完成任務次數
  },
  mutations: {
    SET_TODO_ARRAY: (state, todoArray) => {
      state.todoArray = todoArray
    },
    SET_FINISHED_ARRAY: (state, finishedArray) => {
      state.finishedArray = finishedArray
    },
    SET_KEEP_TIMES: (state, keepTimes) => {
      state.keepTimes = keepTimes
    }
  }
})

4.Composition Api

之前沒用過Vue3,在這個專案中第一次用,最大的體驗就是Composition Api,所以這里簡單地寫寫,

使用傳統的option配置方法寫組件的時候問題,隨著業務復雜度越來越高,代碼量會不斷的加大;由于相關業務的代碼需要寫到特定的vue實體,導致代碼可復用性不高,而Composition Api就是為了解決這個問題而生,

在vue2中,我們知道寫在data和computed中的資料才是回應式的,寫在methods中的函式才能在template的節點中使用,

所以 回應式資料 和 頁面方法 都和vue實體系結在一起,假如,多個vue實體,每個實體都有msg屬性,changeMsg方法,如果不在每個實體分別定義,比較優雅的方法是可以通過mixin混入,

Composition Api把回應式資料和vue實體解耦,你可以通過呼叫特定方法(比如reactive、ref、computed)隨便在哪里定義回應式資料,然后在vue實體的setup方法使用,

5.案例說明

在我們這個專案中,其實主要維護的資料結構有兩個:待完成陣列(todoArray)和已完成陣列(finishedArray),

對陣列的操作就是讀取陣列和更新陣列,

并且在待完成(Todo.vue)、已完成(Finished.vue)、新增任務(Add.vue)這三個組件都有對資料的操作,

file

如果不使用Composition Api,就要在每個組件中定義獲取和更新每個資料資料的方法,而使用Composition Api后,我們將所有資料操作寫在一個檔案中(useData.js),組件中若有需要,可以引入這個檔案,

import { computed, getCurrentInstance } from 'vue'

//封裝對todoArray的獲取和更新
export function useTodo () {
  const { proxy } = getCurrentInstance()  //獲取呼叫該方法的vue實體
  const todoArray = computed(() => proxy.$store.state.todoArray)  //定義計算屬性todoArray
  const updateTodo = (payload) => {   //定義方法
    proxy.$store.commit('SET_TODO_ARRAY', payload)
  }
  return {
    todoArray,
    updateTodo
  }
}

//封裝對finishedArray的獲取和更新
export function useFinished () {
  //... 和上面todoArray類似
}

//封裝對keepTimes的獲取和更新
export function useKeepTimes () {
  //... 和上面todoArray類似
}

在組件中使用(以Finished.vue為例):

<template>
  <h2>今日已完成任務</h2>
  <ul >
    <li  v-for="(item,index) in finishedArray" :key="index">
      <span >{{item.name}}</span>
      <span ></span>
    </li>
  </ul>
  <p>你已經對自己信守承諾<span >{{keepTimes}}</span>次,繼續加油哦!</p>
</template>
<script>
<script>
import { useFinished, useKeepTimes } from '../utils/useData.js'
export default {
  setup () {
    const { finishedArray } = useFinished()
    const { keepTimes } = useKeepTimes()
    return {          //在setup函式中return就可以在template中直接使用
      finishedArray,
      keepTimes
    }
  }
}
</script>

6.主行程

主行程中的代碼和之前專案基本一樣,可以在 入門篇 看主行程功能,

之前專案中,渲染行程對應的html檔案都是用file://協議加載,而在這里需要區分開發環境和生產環境,

在開發環境下,由于使用了webpack-dev-server,所以要訪問dev server的地址(process.env.WEBPACK_DEV_SERVER_URL)才能得到實時更新的頁面內容,而在生產環境下,使用file://協議,

//background.js
app.on('ready', async () => {
  mainWindow = new BrowserWindow({
    frame: false,
    resizable: false,
    width: 800,
    height: 600,
    icon: iconPath,
    webPreferences:{
      backgroundThrottling: false,
      nodeIntegration:true,
      contextIsolation: false
    }
  })
  if (process.env.WEBPACK_DEV_SERVER_URL) {
    // 開發環境下,訪問dev server的地址
    await mainWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL + '/main.html')
  } else {
    createProtocol('app')
    // 生產環境下,使用`file://`協議加載main.html
    mainWindow.loadURL(`file://${__dirname}/main.html`)
  }
  mainWindow.removeMenu()
  setTray ()
})

7.打包

直接執行命令:

npm run electron:build

打包生成的內容在 dist_electron 檔案夾,直接基于默認配置打包,生成的dist_electron 檔案夾內容如下:

file

點擊tasky-vue Setup 0.1.0默認是直接一鍵安裝,可以看到在桌面的應用圖示也是默認的,

file

怎樣定制打包,如制作圖示、打包格式、安裝行為等等,可以參考Electron應用的打包和自動更新--案例實戰,非常詳細 ,

由于我們這里使用的是Vue CLI Plugin Electron Builder,打包的配置需要放在vue.config.js中,

// vue.config.js

module.exports = {
  pages: { //多頁面打包
   ...
  },
  pluginOptions: {
    electronBuilder: {
      builderOptions: {
        // options placed here will be merged with default configuration and passed to electron-builder
        "appId": "this.is.tasky",
        "productName": "Tasky",
        "copyright": "Copyright ? 2021 Alaso",
        "directories": {
          "buildResources": "build"
        },
        "mac": {
          "category": "public.app-category.utilities"
        },
        "dmg": {
          "background": "build/background.jfif",
          "icon": "build/icons/icon.icns",
          "iconSize": 100,
          "contents": [
            {
              "x": 380,
              "y": 180,
              "type": "link",
              "path": "/Applications"
            },
            {
              "x": 130,
              "y": 180,
              "type": "file"
            }
          ],
          "window": {
            "width": 540,
            "height": 380
          }
        },
        "win": {
          "target": [
            "msi",
            "nsis"
          ],
          "icon": "build/icons/icon.ico"
        },
        "nsis": {
          "oneClick": false,
          "language": "2052",
          "perMachine": true,
          "allowToChangeInstallationDirectory": true
        }
      }
    }
  }
}

三 、 云端一鍵部署上線應用

1.上傳代碼

git add . 
git commit -m '添加你的注釋'
git push

2.在日常環境部署

一鍵進行應用部署,在應用詳情頁面點擊日常環境的「部署」按鈕進行一鍵部署,部署狀態變成綠色已部署以后可以點擊訪問部署網站查看效果,

file

3.配置自定義域名在線上環境上線

配置線上環境自定義域名,在功能開發驗證完成后要在線上環境進行部署,在線上環境的「部署配置」-「自定義域名」中填寫自己的域名,例如我們添加一個二級域名 company.workbench.fun 來系結我們部署的前端應用,然后復制自定義域名下方的API網關地址對添加的二級域名進行CNAME配置,

file

配置CNAME地址,復制好 API網關域名地址后,來到你自己的域名管理平臺(此示例中的域名管理是阿里云的域名管理控制臺,請去自己的域名控制臺操作),添加記錄的「記錄型別」選擇「CNAME」,在「主機記錄」中輸入你要創建的二級域名,這里我們輸入「company」,在「記錄值」中粘貼我們之前復制的 API網關域名地址,「TTL」保留默認值或者設定一個你認為合適的值即可,

file

在線上環境部署上線,回到云開發平臺的應用詳情頁面,按照部署的操作,點擊線上環境的「部署按鈕」,部署完成以后就在你自定義的域名進行了上線,CNAME 生效之后,我們輸入 company.workbench.fun(示例網址) 可以打開部署的頁面,至此,如何部署一個應用到線上環境,如何系結自己的域名來訪問一個線上的應用就完成了,趕緊部署自己的應用到線上環境,用自己的域名玩起來吧 ;)

file

一鍵創建Vue應用模版鏈接 :https://workbench.aliyun.com/application/front/create?fromConfig=34&fromRepo=sol_github_34

參考文獻:https://juejin.cn/post/6983843979133468708

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/461885.html

標籤:其他

上一篇:JavaScript知識總結 基礎篇

下一篇:前端大屏模板分享-可在線瀏覽

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more