add package
This commit is contained in:
97
package.ps1
Normal file
97
package.ps1
Normal file
@@ -0,0 +1,97 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user