Nuxt/packages/webpack/src/plugins/dynamic-base.ts

34 lines
965 B
TypeScript

import { createUnplugin } from 'unplugin'
import MagicString from 'magic-string'
interface DynamicBasePluginOptions {
globalPublicPath?: string
sourcemap?: boolean
}
const defaults: DynamicBasePluginOptions = {
globalPublicPath: '__webpack_public_path__',
sourcemap: true,
}
const ENTRY_RE = /import ["']#build\/css["'];/
export const DynamicBasePlugin = createUnplugin((options: DynamicBasePluginOptions = {}) => {
options = { ...defaults, ...options }
return {
name: 'nuxt:dynamic-base-path',
enforce: 'post' as const,
transform (code, id) {
if (!id.includes('entry') || !ENTRY_RE.test(code)) { return }
const s = new MagicString(code)
s.prepend(`import { buildAssetsURL } from '#internal/nuxt/paths';\n${options.globalPublicPath} = buildAssetsURL();\n`)
return {
code: s.toString(),
map: options.sourcemap
? s.generateMap({ hires: true })
: undefined,
}
},
}
})