npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@d-zero/print

v2.4.7

Published

Print web pages to PDF or image files.

Readme

@d-zero/print

ウェブサイトのスクリーンショットを撮影するツールです。

  • Puppeteerを実行してページのスクリーンショットを撮影します
  • pngpdfnoteの3つの形式で出力できます
  • 複数のデバイスサイズでスクリーンショットを撮影可能(7種類のプリセット + カスタム設定)
  • レスポンシブデザインの検証に最適

CLI

npx @d-zero/print -f <listfile> [options]
npx @d-zero/print <url>... [options]

リストをファイルから読み込むか、URLを直接指定して実行します。

実行した結果は.printディレクトリに保存されます。

オプション

  • -f, --listfile <file>: URLリストを持つファイルのパス
  • <url>: 対象のURL(複数指定可能)
  • -t, --type <type>: 出力形式(デフォルト: png)
    • png: PNG画像(指定されたデバイスサイズで生成されます)
    • pdf: PDFファイル(ブラウザの印刷機能を使用、Print CSSが適用されます)
    • note: PNG画像のスクリーンショットに対してメモ欄付きのPDFファイルが生成されます
  • -d, --devices <devices>: デバイスプリセット(カンマ区切り、デフォルト: desktop-compact,mobile)
  • --limit <number>: 並列実行数の上限(デフォルト: 10)
  • --debug: デバッグモード(デフォルト: false)
  • --verbose: 詳細ログモード(デフォルト: false)

利用可能なデバイスプリセット

  • desktop: 1400px幅
  • tablet: 768px幅
  • mobile: 375px幅(2倍解像度)
  • desktop-hd: 1920px幅
  • desktop-compact: 1280px幅
  • mobile-large: 414px幅(3倍解像度)
  • mobile-small: 320px幅(2倍解像度)

使用例

# デフォルトデバイス(desktop-compact, mobile)
npx @d-zero/print https://example.com

# カスタムデバイス指定
npx @d-zero/print https://example.com --devices desktop,tablet,mobile

# PDF出力
npx @d-zero/print -f urls.txt --type pdf

# ファイルから読み込み + デバイス指定
npx @d-zero/print -f urls.txt --devices desktop,mobile

URLリストのファイルフォーマット

https://example.com
https://example.com/a
https://example.com/b
ID:ABC https://example.com/c
ID:XYZ https://example.com/xyz/001
# コメント
# https://example.com/d

URLの手前に任意のIDを付与することで、出力ファイル名にIDが含まれます。ホワイトスペースで区切ることでIDとURLを分けることができます。 IDが指定されていない場合は、連番がIDとして使用されます。連番は1から始まり、3桁のゼロパディングされた数字として出力されます。空行を除いた行数が連番として使用されます。

#で始まる行はコメントとして無視されます。

ページフック

Frontmatterhooksに配列としてスクリプトファイルのパスを渡すと、ページを開いた後(厳密にはPuppeteerのwaitUntil: 'networkidle0'のタイミング直後)にそれらのスクリプトを実行します。スクリプトは配列の順番通りに逐次実行されます。

---
hooks:
  - ./hook1.cjs
  - ./hook2.mjs
---

https://example.com
https://example.com/a
︙

フックスクリプトは、以下のようにエクスポートされた関数を持つモジュールとして定義します。

/**
 * @type {import('@d-zero/print').PageHook}
 */
export default async function (page, { name, width, resolution, log }) {
	// 非同期処理可能
	// page: PuppeteerのPageオブジェクト
	// name: サイズ名('desktop' | 'mobile')
	// width: ウィンドウ幅
	// resolution: 解像度
	// log: ロガー

	// ログイン処理の例
	log('login');
	await page.type('#username', 'user');
	await page.type('#password', 'pass');
	await page.click('button[type="submit"]');
	await page.waitForNavigation();
	log('login done');
}

例のように、ページにログインする処理をフックスクリプトに記述することで、ユーザー認証が必要なページのスクリーンショットを撮影することができます。

認証

Basic認証

Basic認証が必要なページの場合はURLにユーザー名とパスワードを含めます。

例: https://user:[email protected]