fix: 修复 Sense Windows 包白屏 (#70)
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
param([Parameter(Mandatory = $true)][string]$WebRoot)
|
||||
Set-StrictMode -Version 3.0
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$root = [IO.Path]::GetFullPath($WebRoot)
|
||||
$indexPath = Join-Path $root 'index.html'
|
||||
if (-not (Test-Path -LiteralPath $indexPath -PathType Leaf)) {
|
||||
throw "Web index not found: $indexPath"
|
||||
}
|
||||
|
||||
$rootPrefix = $root.TrimEnd('\') + '\'
|
||||
$html = Get-Content -LiteralPath $indexPath -Raw
|
||||
$references = [regex]::Matches($html, '(?i)(?:src|href)\s*=\s*["''](?<path>[^"'']+)["'']')
|
||||
$checked = 0
|
||||
foreach ($match in $references) {
|
||||
$assetReference = $match.Groups['path'].Value.Trim()
|
||||
if (-not $assetReference -or $assetReference.StartsWith('//') -or $assetReference -match '^[a-z][a-z0-9+.-]*:') {
|
||||
continue
|
||||
}
|
||||
$assetPath = ($assetReference -split '[?#]', 2)[0]
|
||||
if ([IO.Path]::GetExtension($assetPath).ToLowerInvariant() -notin @('.js', '.css')) {
|
||||
continue
|
||||
}
|
||||
$relative = [Uri]::UnescapeDataString($assetPath).TrimStart('/').Replace('/', '\')
|
||||
if (-not $relative) { throw "Web index contains an empty local asset path: $assetReference" }
|
||||
$resolved = [IO.Path]::GetFullPath((Join-Path $root $relative))
|
||||
if (-not $resolved.StartsWith($rootPrefix, [StringComparison]::OrdinalIgnoreCase)) {
|
||||
throw "Web index asset escapes the web root: $assetReference"
|
||||
}
|
||||
if (-not (Test-Path -LiteralPath $resolved -PathType Leaf)) {
|
||||
throw "Web index references missing local asset: $assetReference"
|
||||
}
|
||||
$checked++
|
||||
}
|
||||
|
||||
if ($checked -eq 0) { throw 'Web index does not reference any local JavaScript or CSS assets.' }
|
||||
Write-Host "Sense web asset audit passed: $checked local references."
|
||||
@@ -15,6 +15,7 @@ $required = @(
|
||||
foreach ($relative in $required) {
|
||||
if (-not (Test-Path -LiteralPath (Join-Path $root $relative))) { throw "Package is missing required path: $relative" }
|
||||
}
|
||||
& (Join-Path $PSScriptRoot 'assert-web-assets.ps1') -WebRoot (Join-Path $root 'web')
|
||||
$forbiddenDirectories = Get-ChildItem -LiteralPath $root -Recurse -Directory | Where-Object { $_.Name -in @('node_modules', '.git', 'dist', '.cache') }
|
||||
if ($forbiddenDirectories) { throw "Package contains forbidden build directory: $($forbiddenDirectories[0].FullName)" }
|
||||
$forbiddenFiles = Get-ChildItem -LiteralPath $root -Recurse -File | Where-Object { $_.Extension -in @('.db', '.sqlite', '.sqlite3', '.dump', '.bak') }
|
||||
|
||||
Reference in New Issue
Block a user