@@ -5,6 +5,8 @@ import fse from 'fs-extra'
55import { resolve } from 'pathe'
66import { addServerMiddleware } from '@nuxt/kit'
77import type { Plugin as VitePlugin , ViteDevServer } from 'vite'
8+ import { ExternalsOptions , isExternal , ExternalsDefaults } from 'externality'
9+ import { resolve as resolveModule } from 'mlly'
810import { distDir } from './dirs'
911import type { ViteBuildContext } from './vite'
1012import { isCSS } from './utils'
@@ -56,7 +58,8 @@ function createViteNodeMiddleware (ctx: ViteBuildContext) {
5658 } ) )
5759
5860 app . use ( '/module' , defineLazyEventHandler ( ( ) => {
59- const node : ViteNodeServer = new ViteNodeServer ( ctx . ssrServer , {
61+ const viteServer = ctx . ssrServer
62+ const node : ViteNodeServer = new ViteNodeServer ( viteServer , {
6063 deps : {
6164 inline : [
6265 / \/ ( n u x t | n u x t 3 ) \/ / ,
@@ -69,6 +72,31 @@ function createViteNodeMiddleware (ctx: ViteBuildContext) {
6972 web : [ ]
7073 }
7174 } )
75+ const externalOpts : ExternalsOptions = {
76+ inline : [
77+ / v i r t u a l : / ,
78+ / \. t s $ / ,
79+ ...ExternalsDefaults . inline ,
80+ ...viteServer . config . ssr . noExternal as string [ ]
81+ ] ,
82+ external : [
83+ ...viteServer . config . ssr . external ,
84+ / n o d e _ m o d u l e s /
85+ ] ,
86+ resolve : {
87+ type : 'module' ,
88+ extensions : [ '.ts' , '.js' , '.json' , '.vue' , '.mjs' , '.jsx' , '.tsx' , '.wasm' ]
89+ }
90+ }
91+ const rootDir = ctx . nuxt . options . rootDir
92+ node . shouldExternalize = async ( id : string ) => {
93+ const result = await isExternal ( id , rootDir , externalOpts )
94+ if ( result ?. external ) {
95+ return resolveModule ( result . id , { url : rootDir } )
96+ }
97+ return false
98+ }
99+
72100 return async ( event ) => {
73101 const moduleId = decodeURI ( event . req . url ) . substring ( 1 )
74102 if ( moduleId === '/' ) {
0 commit comments