Files
tuiche/package.ps1
2025-07-07 14:09:23 +08:00

97 lines
2.7 KiB
PowerShell

param (
[Parameter(ValueFromRemainingArguments = $true)]
[string[]]$AllArgs
)
# 初始化变量
$packageArgs = @()
$flutterArgs = @()
$inFlutterArgs = $false
# 参数解析
foreach ($arg in $AllArgs) {
if ($arg -eq "--args") {
$inFlutterArgs = $true
continue
}
if ($inFlutterArgs) {
$flutterArgs += $arg
} else {
$packageArgs += $arg
}
}
function Write-FilesToJson {
param (
[Parameter(Mandatory=$true)]
[string]$TargetDir, # 要扫描的目录
[Parameter(Mandatory=$true)]
[string]$OutputJsonPath # 输出的 JSON 文件路径
)
if (-Not (Test-Path $TargetDir)) {
throw "dir '$TargetDir' is not exists"
}
# 获取当前工作目录用于相对路径计算
$basePath = Resolve-Path $TargetDir
# 收集所有文件(递归)
$files = Get-ChildItem -Path $TargetDir -File -Recurse | ForEach-Object {
# 计算相对路径
$relativePath = "assets\"+$_.FullName.Substring($basePath.Path.Length).TrimStart('\', '/')
return $relativePath
}
# 转为 JSON 并保存
$json = $files | ConvertTo-Json -Depth 10
Set-Content -Path $OutputJsonPath -Value $json -Encoding UTF8
Write-Host "save to: $OutputJsonPath"
}
function Invoke-AllScriptsInScriptFolder {
param (
[string[]]$packageArgs,
[string[]]$flutterArgs
)
$scriptDir = Join-Path -Path (Get-Location) -ChildPath "script"
if (-not (Test-Path $scriptDir)) {
return
}
$scripts = Get-ChildItem -Path $scriptDir -Filter *.ps1 | Sort-Object Name
foreach ($script in $scripts) {
Write-Host "`nruning script at: $($script.Name)"
& $script.FullName `
--packageArgs @($packageArgs) `
--flutterArgs @($flutterArgs)
if ($LASTEXITCODE -ne 0) {
Write-Host " script $($script.Name) is failed , because return is not 0"
}
}
}
for ($i = 0; $i -lt $packageArgs.Count; $i++) {
$arg = $packageArgs[$i]
if ($arg.StartsWith("--assetsinfo")) {
$value = ""
if ($arg.Contains('=')) {
$value = $arg -replace '^--assetsinfo=', ''
}
if ([string]::IsNullOrEmpty($value)) {
$value = "assets/file.json"
}
Write-FilesToJson -TargetDir "assets" -OutputJsonPath $value
}
}
Invoke-AllScriptsInScriptFolder -packageArgs $packageArgs -flutterArgs $flutterArgs
# 构造 flutter 命令
$flutterCommand = "flutter"
$flutterArgsStr = $flutterArgs -join " "
Write-Host "`nruning: flutter $flutterArgsStr`n"
if ($flutterArgs.Count -gt 0) {
# 调用 flutter 命令
& $flutterCommand @flutterArgs
}