vue3-core/playground/setup/vite-node.js

57 lines
1.3 KiB
JavaScript
Raw Normal View History

2023-11-30 05:54:27 +08:00
// @ts-check
2023-11-30 04:44:28 +08:00
import { createServer, createLogger } from 'vite'
import { ViteNodeServer } from 'vite-node/server'
import { ViteNodeRunner } from 'vite-node/client'
import { reload } from 'vite-node/hmr'
import { installSourcemapsSupport } from 'vite-node/source-map'
2023-11-30 05:54:27 +08:00
import { DevPlugin } from './dev.js'
2023-11-30 04:44:28 +08:00
2023-11-30 05:54:27 +08:00
export const logger = createLogger(undefined, {
2023-11-30 04:44:28 +08:00
prefix: '[vite-node]',
allowClearScreen: false
})
2023-11-30 05:54:27 +08:00
/**
* @param {() => void} onUpdate
*/
export async function setupViteNode(onUpdate) {
2023-11-30 04:44:28 +08:00
const server = await createServer({
configFile: false,
optimizeDeps: { disabled: true },
plugins: [
DevPlugin(),
{
name: 'hmr',
async handleHotUpdate({ modules }) {
if (modules.length === 0) return
await reload(runner, [])
onUpdate()
}
}
],
customLogger: logger
})
await server.pluginContainer.buildStart({})
const node = new ViteNodeServer(server, {
deps: {
inline: ['@vitejs/plugin-vue']
}
})
installSourcemapsSupport({
getSourceMap: source => node.getSourceMap(source)
})
const runner = new ViteNodeRunner({
root: server.config.root,
base: server.config.base,
fetchModule(id) {
return node.fetchModule(id)
},
async resolveId(id, importer) {
return node.resolveId(id, importer)
}
})
return runner
}