精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Vue或React的多頁應(yīng)用腳手架

開發(fā) 架構(gòu)
一直以來都在研究多頁應(yīng)用如何能有一套像SPA一樣優(yōu)雅的開發(fā)模式。本套架構(gòu)在項目上使用感覺還不錯(已跑在上百個頁面的項目上),所以決定開源出來給大家。閱讀完本文能實現(xiàn)在項目中使用ES6(7)+組件化(.vue | .jsx)開發(fā)多頁應(yīng)用

前言

一直以來都在研究多頁應(yīng)用如何能有一套像SPA一樣優(yōu)雅的開發(fā)模式

本套架構(gòu)在項目上使用感覺還不錯(已跑在上百個頁面的項目上),所以決定開源出來給大家

閱讀完本文能實現(xiàn)在項目中使用ES6(7)+組件化(.vue | .jsx)開發(fā)多頁應(yīng)用

(其實我是想把它做為大家多頁應(yīng)用的腳手架)

目錄結(jié)構(gòu)介紹

TIPS:任何的項目的架構(gòu)都和目錄結(jié)構(gòu)有關(guān),所以這部分非常重要,請仔細耐心閱讀

我們先宏觀的看下結(jié)構(gòu)

  1. |--- public // 生產(chǎn)環(huán)境下所需的文件 
  2.     |--- static 
  3.         |--- css 
  4.         |--- es6 
  5.         |--- fonts 
  6.         |--- images 
  7.     |--- views 
  8. |--- src 
  9.     |--- assets 
  10.         |--- fonts 
  11.         |--- images 
  12.     |--- components 
  13.     |--- js 
  14.     |--- sass 
  15.     |--- static 
  16.         |--- css 
  17.         |--- es6 
  18.         |--- fonts 
  19.         |--- images 
  20.     |--- views  

src里的assets,components,js,sass里的文件***都會生成到src/static下,這個作為我們dev中引用的資源文件。而public不用說,是線上訪問的文件。

我們展開介紹下具體的頁面應(yīng)該如何對應(yīng)它的資源。拿js和views為例

  1. |--- views 
  2.     |--- home // 官網(wǎng)介紹 業(yè)務(wù)模塊 
  3.         |--- index.html 
  4.         ... 
  5.     |--- shopping // 購物業(yè)務(wù)模塊 
  6.         |--- buy.html 
  7.         ... 
  8. |--- js 
  9.     |--- lib 
  10.         |--- vue.js 
  11.         |--- react.js 
  12.         |--- react.dom.js 
  13.         ... 
  14.     |--- home // 官網(wǎng)介紹業(yè)務(wù)模塊的js 
  15.         |--- index.js 
  16.         ... 
  17.     |--- shopping // 購物業(yè)務(wù)模塊的js 
  18.         |--- buy.js 
  19.         ... 
  20.     tools.js 
  21.     common.js  

在多頁應(yīng)用中,往往我們的頁面以業(yè)務(wù)模塊劃分,業(yè)務(wù)模塊由許多的頁面組成。

如home,shopping,可能就分別為官網(wǎng)介紹和購物的業(yè)務(wù)模塊。在這業(yè)務(wù)模塊下,分別有許多個頁面,那我們的js文件也需要命名一一對應(yīng)。

當(dāng)然,我們還有第三方的js庫是不需要編譯的,所以我們專門用一個lib文件夾來存放他們。(包括你自己編寫的指令或者filter等,不需要編譯的,也直接放在lib下引入即可)

另外,你還有許多自己寫的需要編譯的工具庫直接放在js目錄下即可(如,tools.js,common.js)

我們的sass也是同理 

  1. |--- sass 
  2.     |--- home 
  3.         |--- index.scss 
  4.         ... 
  5.     |--- shopping 
  6.         |--- buy.scss 
  7.         ...  

他們編譯在static下的文件將為

  1. |--- static 
  2.     |--- css // scss 編譯后的 
  3.         |--- home 
  4.             |--- index.css 
  5.         |--- shopping 
  6.             |--- buy.css 
  7.     |--- js // babel處理后的js 
  8.         |--- home 
  9.             |--- index.js 
  10.         |--- shopping 
  11.             |--- buy.js  

頁面引用的路徑就為(home/index.html為例) 

  1. ... 
  2. <link rel="stylesheet" href="../../static/css/home/index.css"
  3.  
  4. ... 
  5.  
  6. <script src="../../static/es6/lib/vue(react).js"></script> 
  7. <script src="../../static/es6/lib/react.dom.js"></script> 
  8. <script src="../../static/es6/home/index.js"></script> 
  9. ...  

js和sass搞定了后,我們的難點是編寫組件的過程中,如何知道應(yīng)該編譯哪個入口js文件呢?

所以我們需要對我們的組件名進行一些約定,這也就是約定大于配置的前提。 

  1. |--- components 
  2.     |--- home // home 業(yè)務(wù)模塊 
  3.         |--- home-header.vue(jsx) 
  4.         |--- index-info.vue(jsx) 
  5.         ... 
  6.     |--- shopping  // shopping 業(yè)務(wù)模塊 
  7.         |--- buy-list.vue(jsx) 
  8.         ...  

我們components下的業(yè)務(wù)模塊名和之前的sass,js一樣。具體組件那就有所不同。

我們分為幾種類型的組件

一、當(dāng)前頁面使用的組件

二、當(dāng)前業(yè)務(wù)模塊下的公用組件

三、所有業(yè)務(wù)模塊的通用組件

當(dāng)前頁面組件的命名,我們約定為 [頁面]-[組件].vue(jsx)

如下 

  1. |--- components 
  2.     |--- home 
  3.         |--- index-info.vue(jsx)  

這個 index-info 的組件就僅僅只有在home/index.html頁面下使用,當(dāng)你修改了這個組件后,會自動編譯home/index.js路口js文件并刷新頁面。

當(dāng)前業(yè)務(wù)模塊下的公用組件,我們約定為 [業(yè)務(wù)模塊]-[組件].vue(jsx)

如下 

  1. |--- components 
  2.     |--- common 
  3.         |--- loading.vue(jsx)  

這個home-header組件就屬于home業(yè)務(wù)模塊下的公用組件,當(dāng)你修改了這個組件后,會自動編譯home業(yè)務(wù)模塊下所有的js文件并刷新頁面。

剩下的就是所有業(yè)務(wù)模塊下的通用組件,我們約定全放在components/common目錄下,不需要具體命名約定 

  1. |--- components 
  2.     |--- common 
  3.         |--- loading.vue(jsx)  

這個loading組件就屬于所有業(yè)務(wù)模塊下的公用組件,當(dāng)你修改了這個組件后,會自動編譯所有業(yè)務(wù)模塊下的js文件并刷新頁面。

編譯組件的原理以及為什么約定命名的原因是:

我會根據(jù)組件更改變動,去讀取文件夾名,組件名,并編譯對應(yīng)名的路口js

至此,我們就把組件的問題也解決了

由于我采用的是主gulp輔webpack,webpack僅僅只編譯用,所以編譯基本達到秒編譯。比單純利用webpack做構(gòu)建快得多。如果單純采用webpack做構(gòu)建,需要去配置entry,配置HTMLPlugin。所以會慢得多,然而我這一套并不需要如此繁瑣。

圖片&&字體文件

這其實是一個大坑

我們的實現(xiàn)目標(biāo)是組件能相對路徑引入圖片或字體文件 

  1. // 如 在html標(biāo)簽里這樣 
  2. <template> 
  3.     <figure> 
  4.         <img src="../../assets/images/home/logo.jpg" alt="頭像"
  5.     </figure> 
  6. </template> 
  7.  
  8. // 在style里這樣 
  9. <style rel="stylesheet/scss" lang="sass"
  10.     @import "../../sass/home/index-info"
  11.     // 甚至可能在這@import面引入相對路徑,這都會算是在組件里引入相對路徑 
  12.     #bg h3 { 
  13.         background: url("../../assets/images/holmes.jpg"); 
  14.         color: #fff; 
  15.     } 
  16. </style>  

這個坑,真是不可描述,我個人嘗試了各種體位,才把這個坑配置好。

直接給大家看***實現(xiàn)是怎樣的。

dev 的路徑是這樣,頁面可以顯示圖片或字體。

 

build 后的路徑是這樣

 

這樣就達到了開發(fā)和發(fā)布后的資源統(tǒng)一,摸索這一步真是挺累的 T.T,有興趣的自己看源碼吧。

環(huán)境變量的配置

我們在webpack中經(jīng)常會遇見不同環(huán)境下不同配置的問題

首先可在package.json里配置一條script

  1. // package.json 
  2. "scripts": { 
  3.     "build""NODE_ENV=production gulp build"
  4.     "dev""NODE_ENV=dev gulp reload" 
  5. },  

假設(shè)我們需要為不同環(huán)境配置不同的api請求地址,就可以利用我們在package.json設(shè)置的NODE_ENV來識別當(dāng)前環(huán)境(這部分我在gulpfile中處理了,所以在文件里可直接識別NODE_ENV,如下)

  1. //  src/js/ajaxurl.js 
  2.   
  3. const server1 = 'https://production.server.com'
  4. const server2 = 'https://dev.server.com'
  5.  
  6. let useServer = null
  7. if(NODE_ENV === 'production') { 
  8.     useServer = server1; 
  9. else if(NODE_ENV === 'dev') { 
  10.     useServer = server2; 
  11.  
  12. export default useServer; 
  13. // src/js/home/index.js 
  14.  
  15. import url from '../ajaxurl'
  16. console.log(url);  

這樣就解決了我們不同環(huán)境下不同配置的問題,我默認配置了dev和production,大家可以自行拓展。比如

假設(shè)你需要在 開發(fā)中 配置測試,你可以寫一條NODE_ENV=test gulp reload。

如果需要 預(yù)發(fā)布打包 測試,就可以另一條NODE_ENV=preproduction gulp build。

總之就是打包使用gulp build,開發(fā)使用gulp reload。

注意事項

開發(fā):執(zhí)行命令 npm run dev

發(fā)布:執(zhí)行命令 npm run build (BTW,別忘了去gulpfile.js里替換你的CDN鏈接,進入gulp文件修改 const CDN = 'yourCDNLink'這里的變量即可)

命名一定要按約定來!

命名一定要按約定來!

命名一定要按約定來!

否則不知道要編譯誰!!!

gulp配置很簡單,大家可以看一下針對各自項目進行修改,不懂得可以直接問我。

如果你們不完全的前后端分離,把這個src直接放在后臺目錄下也沒有問題。

寫vue和react都沒問題,我把示例demo都寫好了,下面是分別兩個的repo地址。

vue-multpage : https://github.com/MeCKodo/vue-multipage

react-multpage : https://github.com/MeCKodo/react-multipage

TODO

  • [ ] 項目的Unit test
  • [ ] 項目Cli腳手架

后話

本來是想寫成vue-cli或者是create-react-app這種cli腳手架的,但是!本人真是太懶又沒有時間了! 各位看官可以先嘗試clone把玩把玩,如果有足夠多人喜歡,我就把他寫成cli,發(fā)布npm :)

我是用mac下開發(fā)完成的,用了半天多時間專門去給window寫了兼容,window還可能會有bug,不是我說!window就是辣雞!

***給大家看下我們的某項目結(jié)構(gòu)。

總覽

 

js部分

 

sass部分

 

組件和頁面

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2021-01-07 05:34:07

腳手架JDK緩存

2022-01-14 14:09:11

腳手架代碼自定義

2017-07-21 09:56:46

Webpack3 Vue.js腳手架

2021-11-08 09:35:09

Vue代碼前端

2022-12-12 08:56:45

Vite3Vite

2018-05-15 09:10:27

前端vue.jswebpack

2025-05-16 07:24:41

Springkafka腳手架

2021-12-23 10:35:32

SpringCloud腳手架架構(gòu)

2020-03-20 08:32:41

物聯(lián)網(wǎng)腳手架傳感器

2021-05-21 05:22:52

腳手架工具項目

2018-08-30 16:08:37

Node.js腳手架工具

2022-04-24 11:33:47

代碼管理工程

2019-12-25 15:20:48

前端腳手架命令

2018-06-11 14:39:57

前端腳手架工具node.js

2023-11-21 17:36:04

OpenFeignSentinel

2014-08-15 09:36:06

2021-07-13 18:42:38

Spring Boot腳手架開發(fā)

2021-04-25 05:31:33

React.js項目FastReactAp

2024-03-11 13:18:00

RustClap項目

2020-06-29 11:35:02

Spring BootJava腳手架
點贊
收藏

51CTO技術(shù)棧公眾號

欧美一级夜夜爽| 成人精品免费视频| 正在播放亚洲1区| 亚洲欧美视频二区| 在线观看小视频| k8久久久一区二区三区| 国产ts一区二区| 免费黄色激情视频| 红杏成人性视频免费看| 欧美在线免费观看视频| 成人高清dvd| 三区在线观看| 国产在线精品一区二区不卡了 | 91免费看国产| 国偷自拍第113页| 久久中文亚洲字幕| 亚洲精品第一页| 国产性生活一级片| 美女福利一区二区| 一区二区三区在线视频观看| 欧美久久在线| 亚洲高清精品视频| 免费日本视频一区| 97在线看福利| 亚洲最大的黄色网址| 亚洲香蕉视频| 精品日韩99亚洲| 亚洲高清视频免费| 国产精品极品美女在线观看| 亚洲国产精品久久久久秋霞影院| 一区二区不卡在线观看| 日韩高清国产精品| 日本精品在线免费观看| 网曝91综合精品门事件在线| 日韩一卡二卡三卡四卡| 亚洲77777| 在线男人天堂| 亚洲图片欧美视频| 91成人在线视频观看| 国产福利在线看| 91碰在线视频| 成人在线视频电影| av加勒比在线| 国产一区二区调教| 国产精品久久久久久av福利软件 | 日韩久久精品网| 亚洲国产成人精品女人久久久| 亚洲第一天堂久久| 怡红院成人在线| 欧美日韩中文字幕| 777精品久无码人妻蜜桃| 超碰在线网站| 亚洲一级二级在线| 草b视频在线观看| 欧美激情成人动漫| 青草在线视频| 久久99精品国产91久久来源| 国产成人久久精品| 手机在线看片1024| 三级亚洲高清视频| 国产成人午夜视频网址| 69视频免费看| 免费一级片91| 91免费国产网站| 精品国产亚洲一区二区麻豆| 国产成人精品免费| 国产精品毛片一区视频| 国产探花视频在线观看| 国内久久精品视频| 国产主播喷水一区二区| 一级片视频网站| 狠狠久久亚洲欧美| 91精品国自产在线观看| 亚洲AV无码乱码国产精品牛牛| 国产精品一区二区黑丝| 电影午夜精品一区二区三区| 日本高清视频网站| 91免费视频大全| 日本在线高清视频一区| 欧美videos极品另类| 亚洲男帅同性gay1069| 国产精品国产三级国产专区51| 特级毛片在线| 精品久久久久久久久久久久久久| 色综合久久久久无码专区| av高清不卡| 欧美午夜不卡视频| 午夜免费福利网站| 色婷婷av一区二区三区丝袜美腿| 亚洲午夜久久久影院| 国产精品视频看看| 亚洲福利久久| 国产精品第3页| 国产黄频在线观看| 久久亚洲一区二区三区明星换脸| 五月天国产一区| av网站大全在线| 欧美日韩精品二区| 一区二区免费av| 白白在线精品| 在线日韩日本国产亚洲| 麻豆亚洲av熟女国产一区二 | av不卡一区| 亚洲精品午夜精品| 亚洲天堂网av在线| 亚洲女同同性videoxma| 亚洲综合日韩在线| 国产专区在线播放| 亚洲曰韩产成在线| www.涩涩涩| 久久中文资源| 麻豆国产va免费精品高清在线| 国产毛片aaa| 激情欧美日韩一区二区| 欧美极品色图| 日韩精品卡一| 欧美手机在线视频| 欧美夫妇交换xxx| 亚洲一区欧美| 国产精品久久视频| 四季av日韩精品一区| 国产精品的网站| 人妻熟女一二三区夜夜爱| 日韩一区二区三区精品| 中文字幕国产精品| 亚洲欧美综合另类| 成人久久久精品乱码一区二区三区| 手机成人在线| 乡村艳史在线观看| 精品美女被调教视频大全网站| 波多野结衣家庭教师在线观看| 日韩午夜电影| 成人影片在线播放| caopo在线| 欧美日本在线观看| 粉嫩精品久久99综合一区| 美女精品网站| 免费av一区二区三区| 狠狠操一区二区三区| 精品少妇一区二区三区免费观看| 久草福利资源在线| 麻豆精品国产传媒mv男同| 日本在线播放不卡| 日韩精品三区| 国产亚洲精品日韩| 男操女视频网站| 久久精品一区二区三区不卡| 国产美女三级视频| 亚洲第一论坛sis| 欧美一级在线亚洲天堂| 五月天福利视频| 午夜精品成人在线| 六十路息与子猛烈交尾| 一本色道精品久久一区二区三区 | 亚洲狼人综合网| 亚洲激情自拍偷拍| 九九九久久久久久久| 欧美一区影院| caoporen国产精品| cao在线视频| 精品视频—区二区三区免费| 在线能看的av| 久久婷婷国产综合精品青草| www.xxx亚洲| 青草国产精品| 91久久国产精品| 日本高清成人vr专区| 精品国产三级电影在线观看| 日韩av片在线播放| 2023国产一二三区日本精品2022| 色欲av无码一区二区人妻| 免费视频一区三区| 国产欧美精品一区二区三区介绍 | 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 天天av天天翘天天综合网色鬼国产 | 成人欧美一区二区三区的电影| 亚洲色图美腿丝袜| 亚洲影院一区二区三区| 亚洲欧美日韩一区二区| 在线观看一区二区三区四区| 国产模特精品视频久久久久| 日韩国产在线一区| 国产精品777777在线播放| 国语对白做受69| 国产精品四虎| 日韩欧美在线一区二区三区| 久久中文字幕免费| 中文字幕一区二区三区乱码在线| 三大队在线观看| 久久福利影视| 久久香蕉视频网站| 亚洲自拍电影| 91免费版网站在线观看| 亚洲同志男男gay1069网站| 丝袜美腿亚洲一区二区| 狠狠人妻久久久久久综合麻豆| 欧美日韩亚洲视频一区| 国产91在线播放九色| av网站一区二区三区| 中文字幕 91| 国产日韩1区| 9l视频自拍9l视频自拍| 亚洲精品进入| 99久热re在线精品996热视频| 欧美男女交配| 欧美老女人在线视频| 成人高清在线| 亚洲成人久久一区| 亚洲一级黄色大片| 疯狂做受xxxx高潮欧美日本| 国产成人久久久久| 国产欧美精品一区| 免费黄色三级网站| 国产九色精品成人porny| 日韩毛片在线免费看| 亚洲午夜伦理| 中文字幕欧美日韩一区二区三区| 色婷婷狠狠五月综合天色拍| 亚洲一区二区三区香蕉| 欧美色网在线| 欧美在线影院在线视频| av老司机在线观看| 精品国产一区二区三区久久狼黑人| 亚洲av成人精品一区二区三区在线播放| 在线成人午夜影院| 久久精品99北条麻妃| 欧美日韩国产综合视频在线观看中文 | 999在线免费视频| 国产精品毛片在线看| 日韩一级片免费视频| 欧美福利在线| 国产又大又长又粗又黄| 欧美色图国产精品| 欧美亚洲爱爱另类综合| 亚洲欧美tv| 久久久水蜜桃| 欧美电影免费网站| 国产精品久久九九| 一级毛片精品毛片| julia一区二区中文久久94| 精品国产亚洲一区二区三区在线| 国产在线观看不卡| 激情久久99| 国产精品永久免费观看| jizz欧美| 成人黄色免费看| 国产精品xnxxcom| 91亚洲精品久久久| 欧美二区观看| 电影午夜精品一区二区三区| 超碰地址久久| 精品免费二区三区三区高中清不卡| 超碰精品在线观看| 黄色国产精品一区二区三区| 乱中年女人伦av一区二区| 国外成人免费视频| 伊人成综合网yiren22| 日本10禁啪啪无遮挡免费一区二区| 国产videos久久| 色爱区成人综合网| 国产高清一区| 精品人妻人人做人人爽| 99精品免费视频| 日av中文字幕| 美国毛片一区二区三区| 中文字幕第一页在线视频| 国产麻豆精品久久一二三| 亚洲911精品成人18网站| 成人av在线电影| a毛片毛片av永久免费| 国产精品免费看片| 欧美激情国产精品免费| 婷婷综合另类小说色区| 国产又粗又猛又爽又| 7777精品伊人久久久大香线蕉| 999久久久久| 日韩国产高清污视频在线观看| 国产黄色片在线播放| 久久亚洲精品中文字幕冲田杏梨| 日韩精品分区| 国产精品大陆在线观看| 91精品福利观看| 精品无人区一区二区三区| 欧洲杯什么时候开赛| 性做爰过程免费播放| 亚洲三级视频| 麻豆一区二区三区视频| 国产盗摄视频一区二区三区| 少妇饥渴放荡91麻豆| 国产精品成人免费| www.国产高清| 555www色欧美视频| 午夜av免费在线观看| 色青青草原桃花久久综合| 2019中文字幕在线电影免费| 国产精品成人在线| 激情av综合| 在线观看日韩片| 亚洲免费网址| 乳色吐息在线观看| 国产欧美日本一区视频| 久久香蕉精品视频| 欧美性猛片aaaaaaa做受| 好吊视频一二三区| 久热精品在线视频| 成人va天堂| 国产美女精品在线观看| 久久人体视频| 男人的天堂99| 成人性色生活片免费看爆迷你毛片| 国产精品天天干| 亚洲h动漫在线| 国产精品乱码一区二区| 亚洲天堂久久av| 99在线视频影院| 91免费精品国偷自产在线| av一区二区在线播放| 妞干网在线观看视频| 国产精品一区免费在线观看| 貂蝉被到爽流白浆在线观看| 欧美性xxxxx| 色综合免费视频| 九九热这里只有在线精品视| 亚州欧美在线| 日韩一区二区电影在线观看| 国产亚洲高清视频| 妖精视频一区二区| 一区二区三区精品视频在线| 99热精品在线播放| 日韩中文字幕视频在线| 深夜视频一区二区| 欧美日韩一区二| 国产精品一区毛片| 污网站免费观看| 亚洲国产美女搞黄色| www.av在线.com| 欧美日韩国产999| 日韩激情欧美| 人妻激情另类乱人伦人妻| 国产精品1区二区.| 丰满少妇高潮久久三区| 日韩三区在线观看| 99自拍视频在线观看| 91久久国产婷婷一区二区| 欧美电影一区| 中文字幕 欧美日韩| 国产精品电影一区二区| 国产精品久久久久久免费播放| 日韩专区中文字幕| 少妇精品视频在线观看| 26uuu成人| 国产成人在线免费观看| 麻豆视频在线观看| 亚洲国产小视频在线观看| av女在线播放| 九色综合婷婷综合| 肉肉av福利一精品导航| 亚洲午夜精品久久久久久高潮| 欧美三级电影在线看| 免费在线观看黄色| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 日韩少妇中文字幕| 青青草国产成人av片免费| 亚洲欧美另类日本| 日韩视频一区二区在线观看| 蜜臀av在线| 久久一区二区三区av| 日韩电影在线一区| 国产一区二区精彩视频| 日韩视频一区在线观看| 亚洲最大网站| 伊人久久大香线蕉午夜av| 成人性生交大合| 婷婷激情五月综合| 久久精品影视伊人网| 成人性生交大片免费看96| avav在线看| 亚洲色图在线视频| 日批视频免费播放| 国产成人精品久久二区二区91| 天天超碰亚洲| 国产高清成人久久| 欧美综合色免费| 日韩精品分区| 日本在线观看一区二区| 国产一区二区三区视频在线播放| 国产成人精品a视频一区| 尤物yw午夜国产精品视频| 视频免费一区二区| 91激情视频在线| 亚洲香蕉伊在人在线观| 精品999视频| 91精品黄色| 首页国产欧美久久| 久久久久久国产精品免费播放| 亚洲天堂av在线播放| 国产成人夜色高潮福利影视| 在线黄色免费观看| 欧美日韩国产一区在线| 成人日韩欧美|