背景
uniapp配置离线工程时,需要把www打包资源文件拷贝到iOS/Android相应的路径下,才能完成离线工程打包。其中,iOS/Android放置www资源文件路径如下:
iOS:/Pandora/apps/__UNI__xxxxxxx/
Android:/app/src/assets/apps/__UNI__xxxxxxx/uniapp配置文件manifest.json
该配置文件提供了包括平台,版本号,前端入口路径,各种key值等。
打包流程
由于打包的时候,常见的输入参数包括:分支名称(默认为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]表示匹配数字0到9的任何一个;+表示若干个(可以是1个,也可以是多个)
tr -cd "[0-9]"
通过tr语句获取一个完整且连续的数字序列,比如40720。
这里其实也可以使用上面sed语句来处理。
sed -i '' "s/$currentName/$newName/g" $file
在file文件中使用newName替换currentName字符串。