一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - vue.js - 基于Vue-cli的一套代碼支持多個(gè)項(xiàng)目

基于Vue-cli的一套代碼支持多個(gè)項(xiàng)目

2022-02-19 17:41xieyanmei vue.js

這篇文章主要介紹了基于Vue-cli的一套代碼支持多個(gè)項(xiàng)目的方案,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下

應(yīng)用場景

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

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

思路

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

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

2.如何差異化編譯?

項(xiàng)目結(jié)構(gòu)

同樣一個(gè)頁面,有相同的部分,也有一些不一樣的部分。vue本身的組件化思想很容易讓我們想到把頁面拆分成組件,然后把公共的提取出來,差異化的分別處理。

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

基于Vue-cli的一套代碼支持多個(gè)項(xiàng)目

  • build

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

  • config

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

  • src

源碼文件。

  • assets

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

  • less

樣式文件,這里分主題處理了

  • pages

頁面文件

  • router

路由

  • util

工具類

  • components

基于Vue-cli的一套代碼支持多個(gè)項(xiàng)目

文件夾中是各個(gè)項(xiàng)目的自有的組件。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"
 },

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

2.把config/prod.env.js中注入這個(gè)環(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í)候用上了。比如說,假設(shè)我輸入的編譯命令是

npm run build:gx

這個(gè)時(shí)候

"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:用別名的時(shí)候記得要加上~號

2.組件引用

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

總結(jié)

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

以上就是基于Vue-cli的一套代碼支持多個(gè)項(xiàng)目的詳細(xì)內(nèi)容,更多關(guān)于Vue-cli的一套代碼支持多個(gè)項(xiàng)目的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://segmentfault.com/a/1190000015424032

延伸 · 閱讀

精彩推薦
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個(gè)是vue的基本組件,有需要的同學(xué)可以研究下...

    yukiwu6752022-01-25
  • vue.js用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue中引入svg圖標(biāo)的兩種方式

    Vue中引入svg圖標(biāo)的兩種方式

    這篇文章主要給大家介紹了關(guān)于Vue中引入svg圖標(biāo)的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的...

    十里不故夢10222021-12-31
  • vue.jsVue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學(xué)的同學(xué),可能js的基礎(chǔ)也不是太牢固,聽起來更是吃力,那我就已個(gè)人之淺見,以大白話...

    CRMEB技術(shù)團(tuán)隊(duì)7992021-12-22
  • vue.jsVue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    這篇文章主要介紹了Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋...

    優(yōu)小U9632022-02-21
  • vue.jsVue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    Vue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    最近做了一個(gè)手機(jī)端系統(tǒng),其中遇到了父頁面需要攜帶參數(shù)跳轉(zhuǎn)至子頁面的問題,現(xiàn)已解決,下面分享一下實(shí)現(xiàn)過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
主站蜘蛛池模板: 高h细节肉爽文办公室 | 关晓彤被草| 爱情岛论坛亚洲永久入口口 | 日本高清在线精品一区二区三区 | 好大夫在线个人空间 | 手机在线免费观看高清 | 亚洲日本免费 | 精品老司机在线视频香蕉 | 免费理伦片在线观看全网站 | 成人影院视频 | 日本视频一区在线观看免费 | 欧美穿高跟鞋做爰 | yin乱被cao系列 | 欧美在线播放成人免费 | 91久久偷偷做嫩草影院电 | 国产成人小视频 | 成人快插| 日韩在线免费看 | 操比网| 国产精品美女久久久久 | 亚洲一欧洲中文字幕在线 | 亚洲成人网页 | 成人不卡在线 | 女明星放荡高h日常生活 | 嘿嘿午夜 | 99热免费在线 | 男人使劲躁女人小视频 | 亚洲精品123区在线观看 | 午夜五月天 | 女子监狱第二季未删减在线看 | 国产成人精品午夜视频' | 国产1区精品 | 欧美特欧美特级一片 | 999久久免费高清热精品 | 国产农村一级特黄α真人毛片 | 国外成品精品1688 | 香蕉 在线播放 | 色噜噜亚洲男人的天堂www | 黑人巨大初黑人解禁作品 | 四虎影院免费视频 | 国产成人愉拍免费视频 |