Troubleshooting Bundler Compatibility Issues
Systematic approach for diagnosing library compatibility issues with modern bundlers.
Diagnostic Checklist
1. Version Verification
- •Check installed npm version vs CDN availability (CDNs often lag behind npm)
- •Use Context7 to get latest library documentation
- •Check library changelog for breaking changes in asset loading
2. Identify Asset Type
- •What does the library need: worker, wasm, static asset, CSS?
- •Expected format: URL string, blob, or module import?
- •ES module vs CommonJS vs raw text?
3. Bundler Investigation
Vite:
- •
?urlsuffix returns URL reference, not content - •
?rawsuffix imports as text string - •Check
publicDirin vite.config.js - •Verify asset not treated as ES module incorrectly
Webpack:
- •Check loader configuration for asset type
- •Verify
asset/resourcevsasset/sourcehandling
Solution Patterns
Pattern A: Blob URL (Most Reliable for Workers)
javascript
const workerCode = await import("library/worker.js?raw");
const blob = new Blob([workerCode.default], { type: "application/javascript" });
const workerUrl = URL.createObjectURL(blob);
library.workerSrc = workerUrl;
Pattern B: Public Directory
javascript
// Copy asset to public/ folder, reference with absolute path library.assetSrc = "/asset-file.js";
Pattern C: CDN with Verified Version
javascript
// MUST verify version exists on CDN first
const cdnUrl = `https://cdn.example.com/library/${VERIFIED_VERSION}/asset.js`;
Common Pitfalls
- •npm version != CDN version - npm releases faster than CDN updates
- •Protocol-relative URLs -
//cdn.example.comcan resolve tohttp: - •?url misconception - Returns URL to bundled asset, not the content itself
- •ES module workers - Some workers must load as classic scripts
- •MIME type issues - Blob URLs need correct MIME type
Validation
After applying fix:
- •Test in dev mode (
npm run dev) - •Test in production build (
npm run build && npm run preview) - •Verify no console errors
- •Test actual functionality
- •Check network tab for failed requests
Documentation
After resolving, log in ConPort:
- •Root cause (e.g., "npm version not on CDN")
- •Solution applied (e.g., "blob URL pattern")
- •Why other approaches failed
- •Create system pattern if reusable