利用 PowerShell 脚本实现 UniApp H5 项目自动化打包压缩部署

linbojue
• 阅读 9

前言 在开发 UniApp H5 项目时,随着版本迭代,我们需要不断发布测试版本到线上给测试人员使用;虽然 HBuilderX 点两下就可以打包,但是打包、压缩、再上传还是稍显繁琐。好在 HBuilderX 提供了 CLI 工具,结合 CLI 和其他脚本工具我们可以做到一键打包、发布、并上传部署。 HBuilderX 仅适配了 Windows 和 macOS 平台,本文只研究 Windows 平台如何实现自动化,使用 macOS 平台的朋友对照着 PowerShell 脚本内容,将脚本内容替换成适配 ZSH 的 Shell 脚本即可。 思路 实现思路比较简单,大体步骤如下:

使用 HBuilderX 提供的 CLI 工具打包 UniApp 项目

将打包产物压缩成 zip 文件

弹出文件浏览器并选中高亮 zip 文件

一键上传至测试服务器

脚本内容 这一段比较简单,配置 CLI 路径之后读取当前项目目录,以当前目录路径作为项目路径来进行打包,这意味着我们运行此脚本时需要在项目根目录来运行。 使用时请自行替换 CLI 路径为 HBuilderX 安装路径,CLI 路径以及更多用法参见: hx.dcloud.net.cn/cli/publish… ini 体验AI代码助手 代码解读复制代码$cli = "C:\Users\admin\Documents\tools\HBuilderX\cli.exe" $projectPath = (Get-Location).Path

$parameters = @("publish", "--platform", "h5", "--project", $projectPath) &$cli @parameters

将打包产物压缩成 ZIP 文件,并使用当前日期,结合摘要算法生成随机文件名。 bash 体验AI代码助手 代码解读复制代码$dateTime = Get-Date -Format "yyyy_MM_dd" $fileName = $dateTime + ".zip" Write-Host "正在压缩..." Compress-Archive -Path .\unpackage\dist\build\web* -DestinationPath $fileName -Force $hash = (Get-FileHash -Algorithm SHA256 $fileName).Hash.Substring(0, 8) $newFileName = "dist_$($dateTime)_$hash.zip" Rename-Item -Path $fileName -NewName $newFileName $fileName = $newFileName Write-Host "压缩完成!"

可以使用如下命令打开文件管理器并高亮对应的 zip 文件: bash 体验AI代码助手 代码解读复制代码Invoke-Expression "explorer '/select,.$fileName'"

如果需要自动部署至 Linux 服务器上,需要配置免密登录,大家可以参考这篇文章来实现: www.cnblogs.com/caibaotimes… 自动部署具有一定的风险性,请使用时务必谨慎,确保理解了脚本的每一行含义之后再使用,本人对该脚本带来的一切后果概不负责。 自动部署 自动部署至 Linux 服务器的思路如下:

上传 zip 文件至服务器

备份原有资源文件

解压 zip 文件到项目对应路径

remoteServer 是 SSH 相关配置,将 root 替换为相应用户名, t.tt 替换为服务器对应域名。 另外 shellScript 脚本也需要另行修改,例如前端项目路径为 /opt/project/web,则将脚本第一行中 cd 之后紧跟的项目根路径 /www/wwwroot/t.tt/public 替换为 /opt/project, 脚本中存在的其他 work 目录替换为 web 目录 。 bash 体验AI代码助手 代码解读复制代码$remoteServer = "root@t.tt" $shellScript = @' cd /www/wwwroot/t.tt/public rm -rf work_backup mv work work_backup unzip -q /tmp/{FILENAME} -d work/ '@ $shellScript = $shellScript.Replace("`r", "").Replace("{FILENAME}", $fileName)

Write-Host "正在上传..." scp $fileName "$($remoteServer):/tmp/$($fileName)" Write-Host "上传成功!" ssh $remoteServer $shellScript Write-Host "部署成功!"

配置 PowerShell 编写完脚本后,还需要将该脚本封装为函数,并写进 PowerShell 的配置文件中,这样我们才能在终端中随时调用该打包命令。 PowerShell 的配置文件位于 C:\Users{用户名}\Documents\PowerShell\Microsoft.PowerShell_profile.ps1,如果该文件不存在,请自行创建。 在文件中新建一个名为 buildUNI 的函数,配置相关内容之后关闭该配置文件;新开启一个终端窗口,切换到 UniApp 项目根目录,输入刚才新建的函数内容,即可开始愉快的打包啦~ 以下是完整脚本,Enjoy~ bash 体验AI代码助手 代码解读复制代码function buildUNI { # 打包H5平台文件 $cli = "C:\Users\admin\Documents\tools\HBuilderX\cli.exe" $projectPath = (Get-Location).Path $parameters = @("publish", "--platform", "h5", "--project", $projectPath) &$cli @parameters

# 压缩成zip文件
$dateTime = Get-Date -Format "yyyy_MM_dd"
$fileName = $dateTime + ".zip"
Write-Host "正在压缩..."
Compress-Archive -Path .\unpackage\dist\build\web* -DestinationPath $fileName -Force
$hash = (Get-FileHash -Algorithm SHA256 $fileName).Hash.Substring(0, 8)
$newFileName = "dist_$($dateTime)_$hash.zip"
Rename-Item -Path $fileName -NewName $newFileName
$fileName = $newFileName
Write-Host "压缩完成!"

# 打开对应文件夹并高亮
#Invoke-Expression "explorer '/select,.$fileName'"

$remoteServer = "root@t.tt"
$shellScript = @'
cd /www/wwwroot/t.tt/public
rm -rf work_backup
mv work work_backup
unzip -q /tmp/{FILENAME} -d work/

'@ $shellScript = $shellScript.Replace("`r", "").Replace("{FILENAME}", $fileName)

Write-Host "正在上传..."
scp $fileName "$($remoteServer):/tmp/$($fileName)"
Write-Host "上传成功!"
ssh $remoteServer $shellScript
Write-Host "部署成功!"

}

如果在终端中运行脚本时出现乱码, 可以在 CLI 命令执行前切换终端编码为 GB2312,执行完成后再切换回 UTF8。 php 体验AI代码助手 代码解读复制代码function setUTF8 { $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding }

function setGB2312 { $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("GB2312") }

function buildUNI { ... setGB2312 ... &$cli @parameters setUTF8 ... }

作者:CRMEB定制开发 链接:https://juejin.cn/post/7598251121497374746 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

点赞
收藏
评论区
推荐文章
橘子橙 橘子橙
4年前
vue-element-admin项目打包后,iconfont图标出现乱码
使用vueelementadmin或者vueelementtemplate开发的项目,打包到线上,就出现了图标乱码,f12后能看到icon元素为.eliconclose:before{content:"□"}的情况(如下)
菜鸟阿都 菜鸟阿都
4年前
springboot+vue项目linux环境部署
项目部署是一个程序员必备的技能,当项目开发过程中,需要将项目部署在开发服务器上,进行自测,或协助运维,测试进行环境的搭建配置,学会了项目部署,你就是团队中最亮的那个仔。项目简介后端:springboot项目【打包为jar包】前端:vue项目【通过cli3搭建】目标服务器:liunx操作系统使用工具xshell:通过命令操作服务器sftp:上传安装包到服务器部
CuterCorley CuterCorley
4年前
uni-app入门教程(9)字体库、自定义组件、打包和新闻实战
前言本文主要介绍了4方面内容:在uniapp项目中使用iconfont提供的图标字体库,美化页面;实现自定义组件,并且可以自定义属性和实现父子组件之间的消息传递;微信小程序预览和真机测试,APP端云打包和本地打包;新闻列表和详情实战练习。一、使用iconfont字体库uniapp中可以使用iconfont()提供的图标字体。大致过程如下:
Stella981 Stella981
4年前
Maven命令将本地jar打包到maven仓库
一、背景日常开发中,常见的一种情况是在java项目的pom.xml文件中引入依赖版本信息,由于maven中央仓库没有这个jar,我们可以从其他地方下载下来,然后再使用打包方式将下载下来的jar包打包到maven仓库。二、示例1\.依赖ojabc6引入!在这里插入图片描述(https:/
Stella981 Stella981
4年前
Jenkins+GitLab+Docker+SpringCloud实现可持续自动化微服务
现有混合云平台的场景下,即有线下和线上的环境,又有测试与正式的场景,而且结合了Docker,导致打包内容有所区分,且服务的发布流程复杂起来,手工打包需要在编译阶段就要根据环境到处更改配置,因此纯手工发布增加了实施的难度,需要一个统一的适应各种环境部署的方案。!JenkinsGitLabDockerSpringCloud实现可持续自动化微服务(h
Wesley13 Wesley13
4年前
Linux 运维 9月30日 笔记 6.1
目录一、压缩打包介绍二、gzip压缩工具三、bzip2压缩工具四、xz压缩工具一、压缩打包介绍1.常见压缩文件Windows.rar.zip.7zLinux.zip.gz.bz2.xz.tar 二、gzip压缩工具
LibraHeresy LibraHeresy
2年前
Taro CI 持续集成框架的配置与使用
痛点使用Taro跨端框架开发小程序时,需要切换三个界面,进行三次操作,才能上传成功,上传代码步骤过于繁琐。且多人开发时,如果想让自己代码生效,需要切换体验版代码为自己上传的版本。vscode打包微信开发者工具上传设置为体验版方案使用微信官方的CI插件包,即
APP流水线测试领域探索与最佳实践 | 京东物流技术团队
1背景APP端UI自动化因其特殊性(需连接测试机)一般都在本地执行,这种执行方式的局限性有以下弊端:1.时效性低:研发每次打包后都需要通知测试,测试再去打包平台取包,存在时间差1.研发自测或产品验收无法使用自动化脚本:研发自测及产品验收时如果想用自动化脚本
程序员小五 程序员小五
1年前
融云IM干货丨如何测试插件在UNI-app中的实际效果?
要测试插件在UNIapp中的实际效果,可以遵循以下步骤:1.安装和配置测试环境:确保你的环境中安装了HBuilderX,并且版本至少为3.7.3。如果是uniapp普通项目,需要通过插件hbuilderxforuniapptest来安装测试环境。对于uni
布局王 布局王
7个月前
uniapp跨平台开发HarmonyOS NEXT应用初体验
之前写过使用uniapp开发鸿蒙应用的教程,简单介绍了如何配置开发环境和运行项目。那时候的HbuilderX还是4.22版本,小一年过去了HbuilderX的正式版本已经来到4.64,历经了多个版本的更新后,跨平台开发鸿蒙应用的体验大幅提升。今天再次跟大家