本文以windows爲例,介紹支持多個子系統的Vue工程項目的搭建過程,相對於單一系統的工程,多個子系統引入了以下一些問題:css
詳細過程參見《Vue環境搭建和項目初始化(windows)》html
PS:npm建議V5.4.2以上,保證package-lock.json起做用,保證可重複構建,詳解見相關文檔前端
這裏是比較通用的模塊,支持一個系統運行最基本的模塊,基本上是最小組合(除ElementUI)vue
基於promise的HTTP庫,能夠用在瀏覽器和node.js中node
npm install axios –save
模擬數據生成器,讓前端獨立於後端進行開發,返回模擬的響應數據。webpack
npm install mockjs --saveios
全局使用axios避免引入麻煩https://zhuanlan.zhihu.com/p/29102204git
當攔截到匹配‘/msg’的 Ajax 請求時,函數msg.getMsg將被執行,並把執行結果做爲響應數據返回github
config/index.js文件中web
{
dev:
proxyTable: {}
}
組件庫
npm install element-ui –save
在 main.js 中寫入如下內容:
import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import App from './App.vue'; Vue.use(ElementUI); new Vue({ el: '#app', render: h => h(App) });
狀態管理模式,記錄登陸狀態,用戶信息
npm install vuex –save
各個子系統因爲業務不一樣可能包含各自單獨須要的模塊,這個根據具體業務須要決定
……
……
單頁面的vue項目由main.js、App.vue、index.html三個核心文件組織構成,針對每一個子系統單獨創建這三個核心文件,最終單獨打包,使每一個子系統獨立成爲一個單頁面vue工程。
文件名 |
說明 |
main.js |
入口文件 |
App.vue |
根組件template,每一個具體頁面均由APP.vue+路由指向的子組件構成 |
index.html |
生成html入口文件模板 |
使用腳手架建立的webpack標準模板項目中,webpack的配置文件位於項目/build目錄下,結構以下:
文件 |
說明 |
webpack.base.conf.js |
基礎配置信息,開發、測試、生產環境共用。包含入口文件配置 |
webpack.dev.conf.js |
開發環境配置信息。包含開發環境下html入口文件的配置 |
webpack.prod.conf.js |
生產環境配置信息。包含生產環境下html入口文件的配置,以及公共庫的打包配置 |
webpack.test.conf.js |
測試環境配置信息 |
以任務中心、我的中心兩個子系統爲例,分別配置兩個子系統的入口文件,如上圖
針對每個子系統生成其對應的一個html入口文件,直接位於dist目錄下。
這裏有個坑,在每一個HtmlWebpackPlugin的chunks中必定要加入'vendor'和'manifest'兩個公共模塊,這樣webpack才能正確識別項目的依賴關係,自動將公共模塊引入到單頁html中
HtmlWebpackPlugin插件的具體配置項含義參考官方文檔
http://www.css88.com/doc/webpack2/plugins/html-webpack-plugin/
https://github.com/jantimon/html-webpack-plugin#configuration
http://www.cnblogs.com/wonyun/p/6030090.html
各個子系統的js和css文件輸出到以各自名稱命名的目錄下,即,dist/[name]/static下
默認配置將node_modules中的依賴單獨打包到vendor,暫時不須要修改和作單獨配置,簡單標明配置項。後續各個子系統單獨的依賴需考慮打包策略
開發環境下須要修改html入口文件模板配置便可,同生產環境,不要忘了'vendor'和'manifest'兩個公共模塊
通過上述配置後打包結果以下圖所示,各個子系統單獨部署時需將子系統文件、mainfest、vendor、子系統html一同部署,多個子系統部署在同一服務器時mianfest與vendor可只部署一次。
格式:http://{服務器IP或域名}:{端口號}/{模板名}.html#/{具體路由}
服務器IP或域名:各個子系統部署位置
模板名:各個子系統不一樣,根據html入口配置項有關
具體路由:各個子系統各自管理內部路由
例如:http://localhost:8080/task.html#/app
http://localhost:8080/personal.html#/personal
目錄名 |
說明 |
build |
Webpack打包配置文件目錄 |
config |
項目配置信息 |
dist |
打包結果目錄 |
node_modules |
依賴包安裝目錄 |
src |
項目代碼目錄 |
static |
靜態文件目錄 |
template |
入口html文件目錄 |
test |
單元測試文件目錄 |
目錄名 |
說明 |
assets |
公共js、css文件 |
components |
公共組件目錄,全部子系統共用 |
modules |
子系統模塊目錄 |
目錄名 |
說明 |
task_center |
任務中心子系統 |
personal_center |
我的中心子系統 |
…… |
…… |
目錄名 |
說明 |
api |
接口代理文件目錄 |
asset |
靜態資源目錄 |
common |
公共函數目錄:子系統公共邏輯處理函數 |
components |
公共組件目錄:子系統公共組件 |
data |
數據處理:各個頁面的數據處理方法 |
mock |
Mock服務:攔截ajax請求,根據模板模擬生成並返回數據 |
pages |
頁面目錄:每一個頁面對應一個pages下級目錄,包含頁面級組件 |
router |
路由目錄 |
store |
Vuex狀態管理目錄 |
App.vue |
子系統根組件文件 |
main.js |
子系統入口文件 |
對於打包構建這塊目前作的還不夠細緻,還有一些其餘優化能夠作,記下來先
官網說明:http://element-cn.eleme.io/2.3/#/zh-CN/component/custom-theme
npm install element-theme –g
在項目目錄下執行命令:
npm i element-theme-chalk –D
et –i
產生element-variables.scss文件
修改element-variables.scss文件中的色值等變量
et
此時,項目目錄下會產生主題樣式目錄theme
import '../theme/index.css' import ElementUI from 'element-ui' import Vue from 'vue' Vue.use(ElementUI)
theme目錄及element-variables.scss文件需提交
vue-route中使用嵌套空的子路由。目前APP.vue只包含一個能夠不使用命名視圖,多個的狀況考慮命名視圖
佈局屬於平臺級公共組件,位於src\components\layout目錄下,以‘_layout.vue’結尾的文件是佈局文件,佈局組件位於comp子目錄,具體結構見下圖:
組件層級歸屬詳細劃分見文檔《雲質量V4.0前端組件分析.xlsx》最後一個頁籤《組件層級及項目歸屬》
項目目錄結構組織見下表:
組件級別 |
所在項目目錄 |
平臺級公共組件 |
src\components |
子系統級組件 |
src\modules\子系統\components |
頁面級組件 |
src\modules\子系統\pages\頁面 |