🏮

npmパッケージの最終更新日がわかるスクリプトを作った

に公開

処理概要と実行結果

Windowsのほうが都合がよかったのでPowerShellスクリプト

  1. 直下に package.json を配置して、JSON解析
  2. dependenciesdevDependencies からパッケージ名を取得
  3. npm view <パッケージ名> でループ処理 & 必要な情報を取得
  4. 表形式でフォーマットして出力
  5. 1年以上更新のないパッケージもフィルタリングして出力

スクリプト

$path = "./package.json"
if (-Not (Test-Path -Path $path)) {
  Write-Host "not found package.json in current directory."
  exit 1
}
$json = (Get-Content -Path $path | ConvertFrom-Json)
$deps = $json.dependencies.PSObject.Properties.Name + $json.devDependencies.PSObject.Properties.Name
$today = Get-Date
Write-Host "scanning packages..."

$output = @()
foreach ($pkg in $deps) {
  try {
    $lastMod = npm view $pkg time.modified --json 2>$null | ConvertFrom-Json;
    $date = [DateTime]$lastMod;
    $daysAgo = $today - $date;
    $output += [PSCustomObject]@{
      Package = $pkg
      LastModified = $date.ToString("yyyy-MM-dd")
      DaysAgo = [math]::Floor($daysAgo.TotalDays)
    };

  } catch {
    Write-Host "Error no such package: $pkg"
    exit 1
  }
}

Write-Host "finished scanning!"
$output | Sort-Object DaysAgo -Descending | Format-Table -AutoSize;

Write-Host "packages not updated for more than 1 year"
$output | Where-Object { $_.DaysAgo -ge 365 } | Sort-Object DaysAgo -Descending | Format-Table -AutoSize;
Write-Host "----------------------------------------------"

PowerShellでUTF-8日本語が使えないの忘れてて5分くらいハマったw

サプライチェーン攻撃には気を付けて
https://socket.dev/blog/shai-hulud-strikes-again-v2

Discussion