Windows環境で md-to-pdf
をインストールする際は、先に puppeteer-core
をインストールしておくこと。
PS> npm install puppeteer-core
PS> npm install md-to-pdf
問題
Windows環境で何も考えずに npm install md-to-pdf
すると、失敗する。
エラー内容は、Chromium最新版のインストールに失敗した旨のもの。
考察
md-to-pdf
はMarkdowsをPDFに変換するツールだが、内部では……
- MarkdownからHTMLを生成
- ヘッドレスブラウザのChromiumでレンダリングし、PDF保存
……みたいな動きをしているらしい。ヘッドレスブラウザをハンドリングするのに使われるのがPuppeteer。
npm install md-to-pdf
すると、依存ライブラリである puppeteer
がインストールされようとし、この puppeteer
がヘッドレスブラウザのChromiumをインストールしようとして、ここで失敗する。ちなみに npm install puppeteer
としてもPuppeteer単体でインストールしようとしても同じように失敗する。
既定では、Puppeteerをインストールすると、インストーラーは、Microsoft Edgeも構築されているオープンソースブラウザーである最新バージョンのChromiumをダウンロードします。Microsoft Edgeがインストールされている場合は、puppeteer-coreを使用できます。puppeteer-coreは、Microsoft Edgeなどの既存のブラウザーインストールを起動するPuppeteerの軽量バージョンです。
(Puppeteer の概要 - Microsoft Edge Development | Microsoft Learn)
こう書かれているので(1)npmがインストールしようとしているChromiumuとEdgeがインストールしているChromiumuがコンフリクトする、(2) puppeteer-core
はインストール可能、(3)md2pdfにも puppeteer
の代わりに依存ライブラリとして認識してもらえるかもしれないと仮説を立てて、やってみた。
結論
Edgeが入っているWindows環境では md-to-pdf
インストール時には先に puppeteer-core
をインストールしておけば良さそう。
PS> npm list
`-- (empty)
PS> npm install puppeteer-core
PS> npm install md-to-pdf
PS> npm list
+-- md-to-pdf@5.2.4
`-- puppeteer-core@20.7.3
実行も問題なかった。
PS> npx md2pdf ".\hogehoge.md"
√ generating PDF from .\hogehoge.md