vite-node.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // @ts-check
  2. import { createServer, createLogger } from 'vite'
  3. import { ViteNodeServer } from 'vite-node/server'
  4. import { ViteNodeRunner } from 'vite-node/client'
  5. import { reload } from 'vite-node/hmr'
  6. import { installSourcemapsSupport } from 'vite-node/source-map'
  7. import { DevPlugin } from './dev.js'
  8. export const logger = createLogger(undefined, {
  9. prefix: '[vite-node]',
  10. allowClearScreen: false
  11. })
  12. /**
  13. * @param {() => void} onUpdate
  14. */
  15. export async function setupViteNode(onUpdate) {
  16. const server = await createServer({
  17. configFile: false,
  18. optimizeDeps: { disabled: true },
  19. plugins: [
  20. DevPlugin(),
  21. {
  22. name: 'hmr',
  23. async handleHotUpdate({ modules }) {
  24. if (modules.length === 0) return
  25. await reload(runner, [])
  26. onUpdate()
  27. }
  28. }
  29. ],
  30. customLogger: logger
  31. })
  32. await server.pluginContainer.buildStart({})
  33. const node = new ViteNodeServer(server, {
  34. deps: {
  35. inline: ['@vitejs/plugin-vue']
  36. }
  37. })
  38. installSourcemapsSupport({
  39. getSourceMap: source => node.getSourceMap(source)
  40. })
  41. const runner = new ViteNodeRunner({
  42. root: server.config.root,
  43. base: server.config.base,
  44. fetchModule(id) {
  45. return node.fetchModule(id)
  46. },
  47. async resolveId(id, importer) {
  48. return node.resolveId(id, importer)
  49. }
  50. })
  51. return runner
  52. }