Hone logo
Hone
Problems

Vue Bundle Analyzer with Size Breakdown

Creating a Vue bundle analyzer is crucial for optimizing application performance. Large bundle sizes lead to slower load times, impacting user experience and SEO. This challenge asks you to build a simple Vue component that analyzes a webpack bundle and displays a breakdown of module sizes, helping developers identify and address potential optimization opportunities.

Problem Description

You need to create a Vue component named BundleAnalyzer that takes a bundlePath prop (string) as input. This component will use the webpack-bundle-analyzer library to analyze the bundle at the specified path and render a visualization of the bundle's contents. The visualization should display a treemap showing the size of each module within the bundle.

Key Requirements:

  • bundlePath Prop: The component must accept a bundlePath prop, which is a string representing the path to the webpack bundle file (e.g., 'dist/bundle.js').
  • Webpack Bundle Analyzer Integration: The component must use the webpack-bundle-analyzer library to analyze the bundle.
  • Treemap Visualization: The component must render a treemap visualization of the bundle's contents using the webpack-bundle-analyzer.
  • Error Handling: The component should gracefully handle cases where the bundlePath is invalid or the bundle file cannot be found. Display an appropriate error message in the UI.
  • Loading State: The component should display a loading indicator while the bundle is being analyzed.

Expected Behavior:

  1. When the component is mounted, it should:
    • Check if bundlePath is provided. If not, display an error message.
    • If bundlePath is provided, display a loading indicator.
    • Analyze the bundle at the specified path using webpack-bundle-analyzer.
    • Render the treemap visualization of the bundle.
  2. If the bundle file is not found or an error occurs during analysis, display an appropriate error message.
  3. The treemap should clearly show the size of each module in the bundle.

Edge Cases to Consider:

  • Invalid bundlePath (e.g., empty string, non-existent path).
  • Bundle file not found at the specified path.
  • Errors during bundle analysis (e.g., invalid bundle format).
  • Large bundle sizes that might impact rendering performance. (While not a primary requirement, consider how the visualization might handle very large bundles).

Examples

Example 1:

Input: bundlePath = 'dist/bundle.js' (where dist/bundle.js exists and is a valid webpack bundle)
Output: A Vue component rendering a treemap visualization of the bundle contents, showing module sizes.
Explanation: The component successfully analyzes the bundle and displays the treemap.

Example 2:

Input: bundlePath = ''
Output: A Vue component displaying an error message: "Bundle path cannot be empty."
Explanation: The component detects an invalid bundle path and displays an error.

Example 3:

Input: bundlePath = 'nonexistent/bundle.js' (where the file does not exist)
Output: A Vue component displaying an error message: "Bundle file not found at 'nonexistent/bundle.js'."
Explanation: The component handles the case where the bundle file is not found.

Constraints

  • Bundle Size: The analyzed bundle should be reasonably sized (under 10MB) to avoid excessive processing time. While the component should handle larger bundles, extremely large bundles might lead to slow rendering.
  • Dependencies: You are allowed to use the webpack-bundle-analyzer library and any other necessary Vue.js related libraries.
  • Performance: The component should render the treemap visualization in a reasonable amount of time (under 5 seconds for a bundle of moderate size).
  • Typescript: The solution must be written in Typescript.

Notes

  • You'll need to install webpack-bundle-analyzer as a development dependency: npm install --save-dev webpack-bundle-analyzer or yarn add --dev webpack-bundle-analyzer.
  • Consider using a loading spinner or other visual indicator to provide feedback to the user while the bundle is being analyzed.
  • The webpack-bundle-analyzer library provides a static method that can be used to analyze a bundle and open a visualization in a browser window. You'll need to adapt this to render the visualization within your Vue component. The library also provides a getAssetStats method which can be used to get the stats programmatically.
  • Focus on the core functionality of analyzing the bundle and displaying the treemap. Advanced features like filtering or sorting are not required for this challenge.
Loading editor...
typescript