[READ-ONLY] Mirror of https://github.com/danielroe/cross-origin-storage. Load shared dependencies from Cross-Origin Storage (COS).
cross-origin-storage
experimental
nuxt
vite
vite-plugin
1import { defineNuxtModule, addServerPlugin, addVitePlugin, createResolver } from '@nuxt/kit'
2import { cosPlugin } from 'vite-plugin-cross-origin-storage'
3
4export interface ModuleOptions {
5 /**
6 * Packages to extract into standalone Cross-Origin Storage chunks.
7 * Each entry is matched against the imported module specifier; a plain
8 * string is treated as an exact match.
9 */
10 packages: Array<string | RegExp>
11}
12
13export default defineNuxtModule<ModuleOptions>({
14 meta: {
15 name: 'nuxt-cos',
16 configKey: 'cos',
17 },
18 defaults: {
19 packages: [/^(?:vue$|@vue\/)/],
20 },
21 setup(options, nuxt) {
22 if (nuxt.options.dev) {
23 return
24 }
25
26 const resolver = createResolver(import.meta.url)
27
28 let scriptContent = ''
29
30 nuxt.options.nitro.virtual ||= {}
31 nuxt.options.nitro.virtual['virtual:cos-loader'] = () => `export default ${JSON.stringify(scriptContent)}`
32
33 addServerPlugin(resolver.resolve('./runtime/server/plugins/inject'))
34
35 addVitePlugin(() => cosPlugin({
36 packages: options.packages,
37 base: '/_nuxt/',
38 onGenerated: (content) => {
39 scriptContent = content
40 },
41 }), { client: true, server: false })
42 },
43})