12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env node
- import { performance } from 'node:perf_hooks'
- import module from 'node:module'
- if (!import.meta.url.includes('node_modules')) {
- try {
- // only available as dev dependency
- await import('source-map-support').then((r) => r.default.install())
- } catch {}
- process.on('unhandledRejection', (err) => {
- throw new Error('UNHANDLED PROMISE REJECTION', { cause: err })
- })
- }
- global.__vite_start_time = performance.now()
- // check debug mode first before requiring the CLI.
- const debugIndex = process.argv.findIndex((arg) => /^(?:-d|--debug)$/.test(arg))
- const filterIndex = process.argv.findIndex((arg) =>
- /^(?:-f|--filter)$/.test(arg),
- )
- const profileIndex = process.argv.indexOf('--profile')
- if (debugIndex > 0) {
- let value = process.argv[debugIndex + 1]
- if (!value || value.startsWith('-')) {
- value = 'vite:*'
- } else {
- // support debugging multiple flags with comma-separated list
- value = value
- .split(',')
- .map((v) => `vite:${v}`)
- .join(',')
- }
- process.env.DEBUG = `${
- process.env.DEBUG ? process.env.DEBUG + ',' : ''
- }${value}`
- if (filterIndex > 0) {
- const filter = process.argv[filterIndex + 1]
- if (filter && !filter.startsWith('-')) {
- process.env.VITE_DEBUG_FILTER = filter
- }
- }
- }
- function start() {
- try {
- // eslint-disable-next-line n/no-unsupported-features/node-builtins -- it is supported in Node 22.8.0+ and only called if it exists
- module.enableCompileCache?.()
- // flush the cache after 10s because the cache is not flushed until process end
- // for dev server, the cache is never flushed unless manually flushed because the process.exit is called
- // also flushing the cache in SIGINT handler seems to cause the process to hang
- setTimeout(() => {
- try {
- // eslint-disable-next-line n/no-unsupported-features/node-builtins -- it is supported in Node 22.12.0+ and only called if it exists
- module.flushCompileCache?.()
- } catch {}
- }, 10 * 1000).unref()
- } catch {}
- return import('../dist/node/cli.js')
- }
- if (profileIndex > 0) {
- process.argv.splice(profileIndex, 1)
- const next = process.argv[profileIndex]
- if (next && !next.startsWith('-')) {
- process.argv.splice(profileIndex, 1)
- }
- const inspector = await import('node:inspector').then((r) => r.default)
- const session = (global.__vite_profile_session = new inspector.Session())
- session.connect()
- session.post('Profiler.enable', () => {
- session.post('Profiler.start', start)
- })
- } else {
- start()
- }
|