基于Vue-cli的一套代碼支持多個項目的解決方案

應(yīng)用場景

在toB端業(yè)務(wù)中盖呼,同樣的產(chǎn)品,客戶多多少少會要求一些定制化化撕。從皮膚几晤,圖片,到一些小的功能的差異植阴。
前端總是沖在最前面需要改的蟹瘾。如果改動不大的話,拉個分支有增加了維護(hù)的成本掠手,分支拉多了憾朴,如果主干有一個問題相當(dāng)于copy了n份,那個滋味簡直不要太酸爽惨撇。那么伊脓,是否可以一套代碼支持多個項目呢?

前段時間,接了一個需求报腔,技術(shù)選型是VUE株搔,用vue-cli搭建的。一套代碼需要支持10幾家客戶纯蛾,每家的皮膚纤房,功能都有一些小的差異,主體流程大致是一樣的翻诉。在這個場景下研究了一下解決方案炮姨。

思路

總體的思路模塊化,然后在編譯的時候根據(jù)輸入命令直接組裝不同的模塊碰煌,打包出我們需要的頁面舒岸。
這個地方就有兩個問題:

1.如何劃分頁面,控制組件的顆粒度芦圾?

2.如何差異化編譯蛾派?

項目結(jié)構(gòu)

同樣一個頁面,有相同的部分个少,也有一些不一樣的部分洪乍。vue本身的組件化思想很容易讓我們想到把頁面拆分成組件,然后把公共的提取出來夜焦,差異化的分別處理壳澳。

項目總體結(jié)構(gòu)

menu.png

build

build結(jié)構(gòu)中主要是webpack的一些腳本配置

config

config文件主要是項目相關(guān)配置,我們常用的就是當(dāng)端口沖突時配置監(jiān)聽端口茫经,打包輸出路徑及命名等

src

源碼文件巷波。

assets:靜態(tài)資源,一般放圖片科平,樣式等

less:樣式文件褥紫,這里分主題處理了

pages:頁面文件

router:路由

util:工具類

components
component.png

文件夾中是各個項目的自有的組件。components目錄下的是公共的組件

static

靜態(tài)資源瞪慧,不會被webpack編譯髓考。一般放一下外部引用文件。

webpack打包配置

如何差異化編譯弃酌?

1.cross-env使用環(huán)境變量氨菇。在編譯階段,根據(jù)編譯傳入的變量不同妓湘,編譯不同的組件查蓉。
首先,要改的是package.json的文件

"scripts": {
    "dev:gx": "cross-env BRANCH_ENV=gx node build/dev-server.js",
    "build:gx": "cross-env BRANCH_ENV=gx node build/build.js"
  },

這個時候我們編譯的時候輸入對應(yīng)的命令 就可以傳入相應(yīng)的環(huán)境變量榜贴。
eg:npm run dev:gx 會傳入BRANCH_ENV=gx豌研。

2.把config/prod.env.js中注入這個環(huán)境變量

module.exports = {
  NODE_ENV: '"production"',
  API_PATH:'""',
  BRANCH_ENV: JSON.stringify(process.env.BRANCH_ENV) || '"base"',
  ignoreCsrfToken:'"false"'
}

3.webpack.base.conf.js

  resolve: {
    extensions: ['', '.js', '.vue', '.json'],
    fallback: [path.join(__dirname, '../node_modules')],
    alias: {
      'vue$': 'vue/dist/vue.common.js',
      'src': path.resolve(__dirname, '../src'),
      'assets': path.resolve(__dirname, '../src/assets/images/'+process.env.BRANCH_ENV),
      'components': path.resolve(__dirname, '../src/components'),
      'componentsDif': path.resolve(__dirname, '../src/components/'+process.env.BRANCH_ENV),
    }
  },

可以看的出,我們把編譯命令注入的環(huán)境變量在引入別名的時候用上了。比如說鹃共,假設(shè)我輸入的編譯命令是

npm run build:gx

這個時候

'assets': path.resolve(__dirname, '../src/assets/images/'+process.env.BRANCH_ENV)
//等同于
'assets': path.resolve(__dirname, '../src/assets/images/gx')

頁面引用

1.圖片引用

<img class="icon-arrow" src="~assets/arrow.png">
//根據(jù)編譯命令鬼佣。圖片引用的是src/assets/images/gx/arrow.png

background: url(~assets/btn_1.png) no-repeat;

ps:用別名的時候記得要加上~號

組價引用

//公共組件
import ruleTitle from 'components/RuleTitle'
//差異化組件
import ruleContent from 'componentsDif/RuleContent'

總結(jié)

總而言之,核心思想就是跟進(jìn)編譯命令傳入環(huán)境變量霜浴,利用環(huán)境變量和別名的配置來差異化打包晶衷。比較難的是如何控制組件的顆粒度,如何拆分組件阴孟,這個需要跟據(jù)需求的不同來實際定制晌纫。

更新:傳變量進(jìn)入需要安裝cross-env,直接npm install cross-env (不好意思很久沒看評論永丝,最近比較忙)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锹漱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子类溢,更是在濱河造成了極大的恐慌凌蔬,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闯冷,死亡現(xiàn)場離奇詭異,居然都是意外死亡懈词,警方通過查閱死者的電腦和手機(jī)蛇耀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坎弯,“玉大人纺涤,你說我怎么就攤上這事】偻” “怎么了撩炊?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崎脉。 經(jīng)常有香客問我拧咳,道長,這世上最難降的妖魔是什么囚灼? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任骆膝,我火速辦了婚禮,結(jié)果婚禮上灶体,老公的妹妹穿的比我還像新娘阅签。我一直安慰自己,他們只是感情好蝎抽,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布政钟。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪养交。 梳的紋絲不亂的頭發(fā)上精算,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音层坠,去河邊找鬼殖妇。 笑死,一個胖子當(dāng)著我的面吹牛破花,可吹牛的內(nèi)容都是我干的厌衔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逆屡,長吁一口氣:“原來是場噩夢啊……” “哼高诺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峭梳,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤舰绘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后葱椭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捂寿,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年孵运,在試婚紗的時候發(fā)現(xiàn)自己被綠了秦陋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡治笨,死狀恐怖驳概,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旷赖,我是刑警寧澤顺又,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站等孵,受9級特大地震影響稚照,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜流济,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一锐锣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绳瘟,春花似錦雕憔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽分瘦。三九已至,卻和暖如春琉苇,著一層夾襖步出監(jiān)牢的瞬間嘲玫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工并扇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留去团,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓穷蛹,卻偏偏與公主長得像土陪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肴熏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1 Webpack 1.1 概念簡介 1.1.1 WebPack是什么 1鬼雀、一個打包工具 2、一個模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,665評論 0 16
  • GitChat技術(shù)雜談 前言 本文較長蛙吏,為了節(jié)省你的閱讀時間源哩,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,693評論 7 110
  • 原文http://www.cnblogs.com/libin-1/p/6596810.html 版本號 vue-c...
    tengrl閱讀 3,652評論 0 0
  • 我覺得只要一個人的時候閉上眼睛鸦做,很多讓我覺得害怕的回憶都會想起励烦。 想起那個夜里,我一個人在家泼诱,崩侠,,當(dāng)時我的室友上班...
    葵兒閱讀 291評論 0 2
  • 文/十月云 “假如時光可以倒流改抡,你最想回到哪一年矢炼?”昨天,好友在微信朋友圈發(fā)了這樣一個問題阿纤。我想了想句灌,在下面打了兩...
    十月云閱讀 998評論 20 49