mirror of https://github.com/vuejs/core.git
57 lines
1.3 KiB
JavaScript
57 lines
1.3 KiB
JavaScript
// @ts-check
|
|
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'
|
|
import { DevPlugin } from './dev.js'
|
|
|
|
export const logger = createLogger(undefined, {
|
|
prefix: '[vite-node]',
|
|
allowClearScreen: false
|
|
})
|
|
|
|
/**
|
|
* @param {() => void} onUpdate
|
|
*/
|
|
export async function setupViteNode(onUpdate) {
|
|
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
|
|
}
|