Skip to content

Replace deprecated **svg2png (PhantomJS)** with a modern alternative (e.g., resvg) #31

@Byron2016

Description

@Byron2016

Description:
The current implementation of the PNG export functionality relies on the svg2png package, which is built on top of phantomjs-prebuilt. As of 2017, PhantomJS has been officially deprecated and is no longer maintained.

The Problem:
Using phantomjs-prebuilt causes significant issues in modern development environments:

  1. Package Manager Compatibility (pnpm): Modern package managers like pnpm block the execution of arbitrary build scripts for security reasons. Since phantomjs-prebuilt requires a post-install script to download its binary, it fails to install correctly, leading to TypeError [ERR_INVALID_ARG_TYPE] or MODULE_NOT_FOUND errors during execution.

  2. Node.js Version Mismatch: The native binaries required by PhantomJS are increasingly incompatible with modern Node.js versions (v20+), causing silent failures or segmentation faults.

3.Maintenance Overhead: Because it relies on an outdated WebKit engine, it does not support modern CSS/SVG features, leading to rendering inconsistencies.

Steps to Reproduce (with pnpm):
1.Clone the repository.

2.Run pnpm install.

3.Attempt to generate a PNG: node bin/lts.js -s 2026-01-01 -e 2027-01-01 -p output.png.

4.Result: The process crashes because the PhantomJS binary is missing or the build script was ignored.

Suggested Solution:
I recommend replacing svg2png with a modern, high-performance alternative that does not rely on a headless browser or complex post-install scripts.

Top candidates:

  • @resvg/resvg-js: Extremely fast, Rust-based, and highly compliant with SVG standards.

  • sharp: The industry standard for Node.js image processing.

Environment:

  • Node.js version: v24.x (and other modern LTS versions)

  • **Package Manager **: pnpm / npm

  • **OS **: Windows / Linux / macOS

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions