Skip to content

Commit b7577ae

Browse files
authored
feat(admin): use Vite as middleware on dev (#500)
* feat(admin): use Vite as middleware on dev close #293 * chore: fix build * feat(admin): dark mode (#502)
1 parent 39c1f79 commit b7577ae

File tree

4 files changed

+50
-46
lines changed

4 files changed

+50
-46
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@
3030
],
3131
"scripts": {
3232
"build": "rm -rf dist && siroc build",
33-
"dev": "BUILD_ADMIN=true nuxt dev docs",
33+
"dev": "ADMIN_DEV=true nuxt dev docs",
3434
"dev:nuxtjs": "nuxt dev nuxtjs.org",
35-
"dev:admin": "vite --config src/admin/vite.config.ts",
35+
"dev:admin": "vite --config src/admin/app/vite.config.ts",
3636
"generate": "nuxt generate --force-build docs",
3737
"generate:nuxtjs": "nuxt generate --force-build nuxtjs.org",
3838
"start": "nuxt start docs",
3939
"start:nuxtjs": "nuxt start nuxtjs.org",
40-
"play": "BUILD_ADMIN=true nuxt dev playground",
40+
"play": "ADMIN_DEV=true nuxt dev playground",
4141
"lint": "eslint --ext .ts,.js,.vue .",
4242
"prepare": "yarn link && yarn link docus && vue-demi-switch 3 vue3",
4343
"release": "yarn test && standard-version && git push --follow-tags && npm publish",

siroc.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export default defineSirocConfig({
1010
'build:extend'() {
1111
// eslint-disable-next-line no-console
1212
console.log('📝 Building the admin app')
13-
execSync('npx vite --config src/admin/vite.config.ts build')
13+
execSync('npx vite --config src/admin/app/vite.config.ts build', { stdio: 'inherit' })
1414
}
1515
}
1616
})

src/admin/vite.config.ts renamed to src/admin/app/vite.config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { join, resolve } from 'path'
1+
import { resolve } from 'path'
22
import { defineConfig } from 'vite'
33
import vue from '@vitejs/plugin-vue'
44
import WindiCSS from 'vite-plugin-windicss'
55
import ViteIcons, { ViteIconsResolver } from 'vite-plugin-icons'
66
import ViteComponents from 'vite-plugin-components'
7-
import { dependencies, devDependencies } from '../../package.json'
7+
import { dependencies, devDependencies } from '../../../package.json'
88

99
const r = path => resolve(__dirname, path)
10-
const root = join(__dirname, 'app')
10+
const root = __dirname
1111

1212
export default defineConfig({
1313
root,
@@ -20,7 +20,7 @@ export default defineConfig({
2020
WindiCSS({
2121
root,
2222
scan: {
23-
include: [r('app/**/*')]
23+
include: [r('**/*')]
2424
}
2525
}),
2626
ViteComponents({

src/admin/index.ts

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { execSync } from 'child_process'
21
import { join } from 'upath'
32
import chalk from 'chalk'
43
import { NuxtOptionsServer } from '@nuxt/types/config/server'
54
import serveStatic from 'serve-static'
65
import { Module } from '@nuxt/types'
6+
import { createServer as createViteServer } from 'vite'
77
import api from './api'
88

99
export default <Module>function () {
@@ -12,43 +12,6 @@ export default <Module>function () {
1212
process.options = nuxt.options
1313
process.previewUrl = 'http://localhost:4000'
1414

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-
5215
// Add runtime plugin
5316
if (options.dev) this.options.plugins.push(require.resolve(join(__dirname, '/runtime/plugin')))
5417

@@ -60,4 +23,45 @@ export default <Module>function () {
6023
chalk.bold('📝 Admin: ') + chalk.underline.yellow(`${process.previewUrl}/admin/`)
6124
)
6225
})
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+
}
6367
}

0 commit comments

Comments
 (0)