PWA Kit uses a traditional Webpack-based approach with SVG sprites and utility functions for responsive images. Storefront Next leverages Vite's native asset handling with a modern component-based approach for responsive images and tree-shaken icon imports. The shift simplifies asset management while providing more powerful responsive image capabilities through the DynamicImage component.
Key Differences
| Aspect | PWA Kit | Storefront Next |
|---|---|---|
| Build Tool | Webpack | Vite |
| Static Directory | app/static/ |
public/ |
| Asset URLs | getAssetUrl() helper |
Direct / paths |
| Icon System | SVG sprite sheet | Tree-shaken React icons |
| Image Component | Custom with SSR preload | <picture> with React 19 preload |
| Responsive Images | Utility functions | DynamicImage component |
| Font Strategy | Chakra UI defaults | Tailwind CSS defaults |
| CSP Headers | Explicit in ssr.js | Framework-handled |
Image Import Patterns
PWA Kit:
import { getAssetUrl } from "@salesforce/pwa-kit-react-sdk/ssr/universal/utils";
const src = getAssetUrl("static/img/hero.png");
// Result: /mobify/bundle/development/static/img/hero.png?v=abc123
Storefront Next:
import heroImage from "/images/hero.png";
// or
const src = "/images/hero.png";
Icon Usage
PWA Kit:
// Import registers to sprite
import "@salesforce/retail-react-app/app/assets/svg/search.svg";
// Use via sprite reference
<Icon>
<use xlinkHref="#search" />
</Icon>;
Storefront Next:
import { Search } from "lucide-react";
<Search className="h-5 w-5" />;
Responsive Image Handling
PWA Kit:
// Manual utility function usage
const {srcSet, sizes} = getResponsivePictureAttributes({
src: imageUrl,
breakpoints: [320, 640, 1024]
})
<picture>
<source srcSet={srcSet} sizes={sizes} />
<img src={imageUrl} alt={alt} />
</picture>
Storefront Next:
// Component handles complexity
<DynamicImage
src={imageUrl}
alt={alt}
widths={{ base: "100vw", md: "50vw", lg: "33vw" }}
priority="high"
/>
Key Similarities
- Lazy loading default: Both default to
loading="lazy". - B2C Commerce images: Both use Dynamic Imaging Service (
?sw={width}). - System fonts: Neither bundles custom web fonts.
- SSR awareness: Both handle preloading for above-fold images.
- Aspect ratio handling: Both manage layout stability.
Storefront Conversion Considerations
-
Asset Path Changes
- Replace
getAssetUrl()with direct/paths. - Move files from
app/static/topublic/.
- Replace
-
SVG Icons
- Replace sprite imports with
lucide-reacticons. - Or create individual SVG component imports.
- Replace sprite imports with
-
Image Component
- Replace custom Image with DynamicImage.
- Update width props to new format.
-
Responsive Images
- Convert utility function usage to DynamicImage props.
- Breakpoint format changes from array to object.