項目組前端比較少,爲了快速開發,使用的是uniapp來發布多端項目,uniapp目前沒法整合web,因此web端使用的是付費的iview-pro組件庫來實現。前端
由於項目需求變更比較快,爲了不一套邏輯實現屢次,使用的是嵌入的方式來複用web和uniapp相同的功能。vue
這會有以下幾個問題:node
同時還有項目混亂的問題:webpack
鑑於上面的問題,考慮在不增長前端開發負擔的狀況下,解決這些問題,指望:git
首先,uni-app在發佈到H5時支持全部vue的語法;發佈到App和小程序時,因爲平臺限制,沒法實現所有vue語法。github
具體差別詳見:uniapp.dcloud.io/useweb
上文列出的差別數量有限,也就是說,只要避免了這些差別,就能保證uniapp和web代碼的基本語法一致性,注意這裏是基本語法。vue-cli
其次,uniapp是支持vue-cli以及npm包依賴的。也就是說,uniapp和web能夠共用倉庫,這就解決了共用代碼的管理問題。相似Java,將共用代碼打包發佈到倉庫,uniapp和web分別引用的方式來使用。npm
具體見:json
不過考慮到前期代碼改動會比較頻繁,以這種方式處理仍是比較麻煩(須要修改、打包、發佈、改版本號在install)。因此直接基於git的subtree來實現代碼層面的共享(修改、提交、拉取),待代碼穩定後,再進行庫的管理。
最後,就是組件庫問題。web目前使用的是iViewAdminUI,uniapp使用的是原生UI。
uniapp原生UI見:uniapp.dcloud.io/component/R…
二者的差別見上文,主要體如今:
因此最主要的問題,就是如何在web端和uniapp端提供一套語法一致的UI組件庫。再結合上面兩個功能,便可提供一套多端語法徹底一致的開發規範。
實際上,要提供一套語法一致的UI組件庫並不難,只是須要花費一點時間,在原UI庫上再封裝一層便可。詳見下節。
計算機科學中遇到的全部問題均可經過增長一層抽象來解決。
All problems in computer science can be solved by another level of indirection。
by David Wheeler
簡單來講,就是經過抽象一層來解決。
考慮到vue的使用人羣更廣,也更偏底層,因此在uniapp上抽象來適配vue。
這樣能解決兩個問題:
假設,web端有以下代碼:
這段代碼在web端能夠直接運行,可是Select在手機端其實並不友好,比較友好的方式應該是Picker,因此,咱們就能夠在uniapp裏編寫一個組件select.vue(這部分代碼經過組件庫的方式來編寫,項目引用便可。)
將其註冊到項目中,組件名叫Select,這樣上面的Select就會被解釋爲Picker來處理了。
上面的方案,具體能夠分爲以下幾步實施:
# 建立uni-app
vue create -p dcloudio/uni-preset-vue my-project
## 若是執行失敗,能夠訪問以下git,下載zip包,解壓
## 而後執行
vue create -p #{解壓目錄} my-project
# 運行、發佈uni-app
npm run dev:%PLATFORM%
npm run build:%PLATFORM%
%PLATFORM% 可取值以下:
npm i node-sass -D
npm i sass-loader -D
注意,雖然subtree能夠任意修改提交,不過仍是儘可能在一處修改,好比在admin-vue項目中編寫,不然合併時衝突解決比較麻煩。
使用步驟:
# module是取的別名
git remote add -f module ${上面的項目git地址}
# 將這個項目拉取到 src/module目錄下
git subtree add --prefix=src/module module master --squash
git subtree push --prefix=src/module module master
git subtree pull --prefix=src/module module master
npm config set registry http://***/repository/npm-public/
設置後,正常使用npm便可
經過
npm adduser
添加用戶!
項目中須要有package.json,注意下面的配置
{
"name": "vue-tmp",
"version": "1.0.0",
"private": false,
"publishConfig" : {
"registry" : "http://***/repository/npm-releases/"
},
...
}
private爲false才能上傳,publishConfig配置的是上傳的倉庫路徑
使用以下命令登陸registry!
npm adduser --registry=http://***/repository/npm-releases/
在項目根目錄下執行:
npm publish
便可上傳成功
注意:scripts中不能有publish,不然會觸發二次publish!正式releases倉庫是關閉reploy的!
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue examples src test/unit test/e2e/specs",
"build": "node build/build.js"
},
公號:抽象思惟