背景
uniapp配置離線工程時,需要把www打包資源文件拷貝到iOS/Android相應(yīng)的路徑下田轧,才能完成離線工程打包辖源。其中,iOS/Android放置www資源文件路徑如下:
iOS:/Pandora/apps/__UNI__xxxxxxx/
Android:/app/src/assets/apps/__UNI__xxxxxxx/uniapp配置文件manifest.json
該配置文件提供了包括平臺精耐,版本號狼速,前端入口路徑,各種key值等卦停。
打包流程
由于打包的時候向胡,常見的輸入?yún)?shù)包括:分支名稱(默認為master),版本名稱(versionName)和版本號(versionCode)惊完。
分支名稱可以參考文章:shell腳本和jenkins的“Jenkins Branches to build切分支”針對版本名稱和版本號進行比較和替換(見后面腳本)
unaipp需要通過cli語言(腳手架語言)改造僵芹,才能適合自動化打包。最后打包完之后专执,生成www資源文件淮捆,用于在一個工程的使用(即原生工程打包)。
腳本
rm -rf dist/build
# check versionName/versionCode
versionName="versionName"
versionCode="versionCode"
dir=`pwd`
file=$dir"/src/manifest.json"
echo "file:"$file
newName=$version_name
newCode=$version_code
nameNo=`grep $versionName $file`
echo "versionName: "$nameNo
codeNo=`grep $versionCode $file`
echo "versionCode: "$codeNo
currentName=`echo "${nameNo}" | sed -r "s/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/g"`
echo "currentName:"$currentNamever
currentCode=`echo "${codeNo}" | tr -cd "[0-9]"`
echo "currentCode:"$currentCode
if [ $currentName == $newName ]; then
echo "get same name"
else
echo "get different name"
sed -i '' "s/$currentName/$newName/g" $file
fi
if [ $currentCode == $newCode ]; then
echo "get same code"
else
echo "get different code"
sed -i '' "s/$currentCode/$newCode/g" $file
fi
#exit 0 #test
#check end
#檢查npm庫安裝
npm install
#編譯h5
npm run build-master:h5
cd dist/build/
zip -q -r app-demo-h5.zip h5
cd ../..
#編譯APP打包資源
npm run build-master:app-plus
mv dist/build/app-plus dist/build/www
- 說明:
sed -r "s/.*([0-9]+\.[0-9]+\.[0-9]+).*/\1/g"
通過正則表達式獲取諸如4.07.20的字符串本股。
其中.表示以.分割攀痊;[0-9]表示匹配數(shù)字0到9的任何一個;+表示若干個(可以是1個拄显,也可以是多個)
tr -cd "[0-9]"
通過tr語句獲取一個完整且連續(xù)的數(shù)字序列苟径,比如40720。
這里其實也可以使用上面sed語句來處理躬审。
sed -i '' "s/$currentName/$newName/g" $file
在file文件中使用newName替換currentName字符串棘街。