unplugin-import-external-cdn
v0.0.1
Published
[![npm version][npm-version-src]][npm-version-href] [![npm downloads][npm-downloads-src]][npm-downloads-href]
Maintainers
Readme
unplugin-import-external-cdn
A unified plugin based on unplugin that automatically rewrites external package imports to CDN URLs (defaulting to esm.sh). It reads your package.json, extracts external dependencies, and intelligently generated CDN equivalents seamlessly across multiple bundlers.
Features
- ⚡️ Supports Vite, Rollup, Webpack, esbuild, Rolldown, and Rspack.
- 📦 Automatically analyzes dependencies from
package.json. - 🔗 Auto-resolves peerDependencies.
- 🎨 Customizable CDN URL generation.
- 🗺️ Support for
importMapinjection.
Installation
npm i -D unplugin-import-external-cdnpnpm i -D unplugin-import-external-cdnyarn add -D unplugin-import-external-cdnUsage
// vite.config.ts
import externalCDN from 'unplugin-import-external-cdn/vite'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [externalCDN()],
})// rollup.config.js
import externalCDN from 'unplugin-import-external-cdn/rollup'
export default {
plugins: [externalCDN()],
}// rolldown.config.js
import externalCDN from 'unplugin-import-external-cdn/rolldown'
export default {
plugins: [externalCDN()],
}// esbuild.config.js
import { build } from 'esbuild'
import externalCDN from 'unplugin-import-external-cdn/esbuild'
build({
plugins: [externalCDN()],
})// webpack.config.js
import externalCDN from 'unplugin-import-external-cdn/webpack'
export default {
plugins: [externalCDN()],
}// rspack.config.js
import externalCDN from 'unplugin-import-external-cdn/rspack'
export default {
plugins: [externalCDN()],
}Options
export interface ImportMap {
imports?: Record<string, string>
scopes?: Record<string, Record<string, string>>
}
export interface Options {
/**
* Custom path generator logic.
* If not provided, it defaults to esm.sh: `https://esm.sh/${name}@${version}?target=esnext`
*/
path?: (
name: string,
version: string,
deps: Record<string, string>,
) => string | URL
/**
* Optionally inject an importMap via Vite's `transformIndexHtml`.
*/
importMap?: ImportMap
}