97 lines
2.7 KiB
PowerShell
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
|
|
} |