1
- import { execSync } from 'child_process'
2
1
import { join } from 'upath'
3
2
import chalk from 'chalk'
4
3
import { NuxtOptionsServer } from '@nuxt/types/config/server'
5
4
import serveStatic from 'serve-static'
6
5
import { Module } from '@nuxt/types'
6
+ import { createServer as createViteServer } from 'vite'
7
7
import api from './api'
8
8
9
9
export default < Module > function ( ) {
@@ -12,43 +12,6 @@ export default <Module>function () {
12
12
process . options = nuxt . options
13
13
process . previewUrl = 'http://localhost:4000'
14
14
15
- addServerMiddleware ( {
16
- path : '/admin/api' ,
17
- handler : api
18
- } )
19
-
20
- // TODO: Implement Vite as server middleware/proxy, so we can remove this
21
- // Build the admin
22
- if ( process . env . BUILD_ADMIN ) execSync ( 'npx vite --config src/admin/vite.config.ts build' )
23
-
24
- this . addServerMiddleware ( {
25
- path : '/admin/' ,
26
- handler : serveStatic ( join ( __dirname , 'app/dist' ) )
27
- } )
28
-
29
- // TODO: Implement Vite as server middleware/proxy
30
- // instead of using the built version.
31
- /* if (process.env.ADMIN_DEV && false) {
32
- // Start the admin in development
33
- const viteServer = await createServer({
34
- configFile: false,
35
- ...viteConfig
36
- })
37
- await viteServer.listen()
38
- const viteUrl = `http://localhost:${viteServer.config.server.port}`
39
-
40
- // TODO: handle when Array syntax
41
- const proxy = (this.options.proxy = this.options.proxy || {})
42
- proxy['/admin/'] = {
43
- target: viteUrl,
44
- pathRewrite: {
45
- '^/admin/': '/'
46
- }
47
- }
48
-
49
- this.requireModule('@nuxtjs/proxy')
50
- } */
51
-
52
15
// Add runtime plugin
53
16
if ( options . dev ) this . options . plugins . push ( require . resolve ( join ( __dirname , '/runtime/plugin' ) ) )
54
17
@@ -60,4 +23,45 @@ export default <Module>function () {
60
23
chalk . bold ( '📝 Admin: ' ) + chalk . underline . yellow ( `${ process . previewUrl } /admin/` )
61
24
)
62
25
} )
26
+
27
+ if ( process . env . ADMIN_DEV ) {
28
+ // use Vite as middleware
29
+ const server = createViteServer ( {
30
+ root : join ( __dirname , 'app' ) ,
31
+ server : {
32
+ middlewareMode : 'html'
33
+ } ,
34
+ plugins : [
35
+ {
36
+ name : 'docus:admin-api' ,
37
+ configureServer ( server ) {
38
+ server . middlewares . use ( '/api' , api )
39
+ }
40
+ }
41
+ ]
42
+ } )
43
+
44
+ nuxt . hook ( 'render:setupMiddleware' , async ( ) => {
45
+ const middleware = ( await server ) . middlewares
46
+
47
+ // remove Vite's base middleware since it's already handled by connect route
48
+ // it's right before '/__open-in-editor' middleware
49
+ const viteBaseMiddlewareIndex = middleware . stack . findIndex ( i => i . route === '/__open-in-editor' ) - 1
50
+ if ( viteBaseMiddlewareIndex >= 0 ) {
51
+ middleware . stack . splice ( viteBaseMiddlewareIndex , 1 )
52
+ }
53
+
54
+ nuxt . server . app . use ( '/admin/' , middleware )
55
+ } )
56
+ } else {
57
+ // use built dist
58
+ addServerMiddleware ( {
59
+ path : '/admin/' ,
60
+ handle : serveStatic ( join ( __dirname , 'app/dist' ) )
61
+ } )
62
+ addServerMiddleware ( {
63
+ path : '/admin/api' ,
64
+ handler : api
65
+ } )
66
+ }
63
67
}
0 commit comments