一次靜態頁面配置化開發

背景

在日常項目開發中,我們可能會遇到一些項目,它們的文案可能會不定期改變,多個頁面有相似之處,但是相同中又有不同,比如有的直播活動,策略邏輯沒變,改了獎品、背景圖和banner,也可以叫做換膚;也比如一些產品的官網,會不斷加一些子頁面,但是風格都是統一的,但會改變佈局和文案。這個時候,做爲技術,我們會思考如何能減少開發成本,避免改動一次文案替換一個圖片就跑一遍繁瑣的上線流程呢?大家一定能想到如果能把這些改動都做成可以配置的,那不就方便很多了麼?前陣子正好做了這樣場景的一個項目,於是嘗試了下把頁面儘可能寫成可配置的。下面就簡單介紹下。

一、項目簡介:

項目是一個官網項目,大部分都是靜態頁,分析需求,總結以下幾點:

  • 子頁面有多個,UI模板類似
  • 部分頁面會經常改動
  • 後期可能增加新頁面,但是風格相同,基本佈局不變
二、整體思路

核心思想:需要配置的能配皆配。
對於整個項目,可以配置的有菜單欄、某個頁面包含的不同模塊
對於單個頁面,可以配置的主要是圖片、文案、樣式、鏈接等

三、實現舉例
菜單配置化

頂部菜單舉例:
菜單的效果如下圖,包含一級菜單和二級菜單

菜單配置json是這樣的


export default {
menus: [ 
    {
      title: {  // 一級菜單標題
        default: '產品',  // 默認文案
        langKey: 'tabLang001', // 多語言文案
      },
      footerShow: true, // 控制頁腳是否展示
      children: [ // 二級菜單
        {
          title: { // 二級菜單標題
            default: '實時音頻互動',
            langKey: 'tabLang002',
          },
          path: '/product/audio-call', // 頁面路由  
          openType: 1, // 是否新頁面打開
          icon: 'tab-p2.png', // 標題左側圖標
            }
           ]
        },
     ]
}

最外層寫成數組,方便拓展,引入賦值後,根據我們的需要進行遍歷,結合判斷具體用途的屬性是否存在實現每一項個性化的配置。

產品系列頁面配置舉例:

我們先來看一下設計稿

可以發現風格類似,每一個產品介紹頁可以提出來
我們再來看一下某一個頁面的大圖

再看下代碼,首先是產品頁,雖然頁面是多個,但是我們可以用一套代碼,這取決於我們將每個模塊也進行了配置化

通過定義modules的name屬性,每個模塊加載對應的配置

可以通過配置裏面直接寫style覆蓋當前樣式,也可以傳數值或者字符串取頁面裏寫好的類名加載不同的樣式。

更進一步

到這裏,我們雖然已經實現了配置化,但卻是本地化的,我們修改一個文案是可以直接改json,但是還是要走打包發佈的流程。如何更進一步呢?這裏我們藉助了公司內部前端架構組研發的pear配置平臺,實現了json配置的線上配置。

首先我們在平臺創建一個配置文件,然後把本地配置數據複製進去,發佈,這樣我們就有了一個在線的配置文件。

然後我們引入對應的包和api調用線上數據


import pearFetch from "@xxx/pear-fetch";


const configFetch = new pearFetch({
  bizType: "xxx",
  pearEnv: env === "prod" ? "prod" : "gray",
});
...
// 通過對應的id 拿到雲端的數據
const json = await configFetch.fetch({ id: xxxxxx });
...

根據json中約定的key,比如這裏是以路由爲key,將數據分發到各個頁面。

最後爲了防止服務停止或者網絡出錯,使用本地json配置兜底,類似這樣

import { PEAR_ID } from '@constant/pear';
import LOCALDATA from '../mock';

    async getJsonConfig() {
      try {
        const configFetch = new pearFetch({
          bizType: 'xxx',
          pearEnv: this.nodeEnv === 'production' ? 'prod' : 'gray',
        });
        this.json = await configFetch.fetch({ id: PEAR_ID });
      } catch (err) {
        // 本地數據兜底
        this.json = LOCALDATA;
      }
    }


pear平臺提供了發佈配置和修改配置的能力,這樣如果有文案需要修改,就可以直接在雲端修改後發佈,不再需要走繁瑣的項目發佈流程了。優點是能快速更新線上。當然之後爲了保持文案同步,建議把雲端最新的配置複製到本地。隨之後版本一起升級。

結語

以上就是關於頁面配置化的一次簡單實踐,總體上提高了開發效率,尤其爲後期維護節約了大量時間,甚至可以交給運營去維護配置,我們只需要發佈之前把關即可。
頁面配置化確實值得嘗試,真的很香!

具體哪些場景更適合?
如何實現更高的靈活性但又不會過度設計浪費開發時間?
這些還需要更深的思考和實踐。也歡迎大家討論補充!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章