Skip to content

this.getModuleInfo().code support in dev #19674

@vladmiller

Description

@vladmiller

Describe the bug

I am building a plugin that prerenders static pages from markdown/react components.

I am programmatically setting the entrypoints, provide the resolveId and load hooks to load the content.

In the reproduction code you will see that I first load load.html file and then, when I load the load.html I am also trying to load some-code?proxy module and get it's code.

In the build mode it works fine. With the dev mode, the load for proxy does not return code.

While debugging, I have noticed that build mode goes directly to rollup, however, in dev mode there is a PluginContext instead.

I have pinpointed the execution to the load method inside of PluginContext. It loads the source-code, however, the last call to this.getModuleInfo does not return the code. And the resulting ModueInfo does not contain anything except id and empty meta.

Image

Reproduction

https://github.com/vladmiller/vite-context-issue

Steps to reproduce

pnpm install

# Build works fine
pnpm vite build

# Dev
pnpm vite

# Navigate to http://localhost:5173/home

System Info

System:
    OS: macOS 15.3.2
    CPU: (8) arm64 Apple M2
    Memory: 476.53 MB / 24.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 23.3.0 - ~/.nvm/versions/node/v23.3.0/bin/node
    npm: 10.9.0 - ~/.nvm/versions/node/v23.3.0/bin/npm
    pnpm: 9.15.4 - ~/.nvm/versions/node/v23.3.0/bin/pnpm
  Browsers:
    Chrome: 133.0.6943.143
    Safari: 18.3.1
  npmPackages:
    vite: ^6.2.2 => 6.2.2

Used Package Manager

pnpm

Logs

Click to expand!
  vite:config config file loaded in 12.82ms +0ms
  vite:env loading env files: [
  vite:env   '/Users/johndoe/Projects/vite-context-issue/.env',
  vite:env   '/Users/johndoe/Projects/vite-context-issue/.env.local',
  vite:env   '/Users/johndoe/Projects/vite-context-issue/.env.development',
  vite:env   '/Users/johndoe/Projects/vite-context-issue/.env.development.local'
  vite:env ] +0ms
  vite:env env files loaded in 0.21ms +0ms
  vite:env using resolved env: {} +0ms
  vite:config using resolved config: {
  vite:config   plugins: [
  vite:config     'vite:optimized-deps',
  vite:config     'vite:watch-package-data',
  vite:config     'vite:pre-alias',
  vite:config     'alias',
  vite:config     'vite:modulepreload-polyfill',
  vite:config     'vite:resolve',
  vite:config     'vite:html-inline-proxy',
  vite:config     'vite:css',
  vite:config     'vite:esbuild',
  vite:config     'vite:json',
  vite:config     'vite:wasm-helper',
  vite:config     'vite:worker',
  vite:config     'vite:asset',
  vite:config     'vite-plugin-index-html',
  vite:config     'vite:wasm-fallback',
  vite:config     'vite:define',
  vite:config     'vite:css-post',
  vite:config     'vite:worker-import-meta-url',
  vite:config     'vite:asset-import-meta-url',
  vite:config     'vite:dynamic-import-vars',
  vite:config     'vite:import-glob',
  vite:config     'vite:client-inject',
  vite:config     'vite:css-analysis',
  vite:config     'vite:import-analysis'
  vite:config   ],
  vite:config   server: {
  vite:config     port: 5173,
  vite:config     strictPort: false,
  vite:config     host: undefined,
  vite:config     allowedHosts: [],
  vite:config     https: undefined,
  vite:config     open: false,
  vite:config     proxy: undefined,
  vite:config     cors: {
  vite:config       origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/
  vite:config     },
  vite:config     headers: {},
  vite:config     warmup: { clientFiles: [], ssrFiles: [] },
  vite:config     middlewareMode: false,
  vite:config     fs: {
  vite:config       strict: true,
  vite:config       deny: [ '.env', '.env.*', '*.{crt,pem}', '**/.git/**' ],
  vite:config       allow: [ '/Users/johndoe/Projects/vite-context-issue' ]
  vite:config     },
  vite:config     preTransformRequests: true,
  vite:config     perEnvironmentStartEndDuringDev: false,
  vite:config     sourcemapIgnoreList: [Function: isInNodeModules$1]
  vite:config   },
  vite:config   environments: {
  vite:config     client: {
  vite:config       define: undefined,
  vite:config       resolve: {
  vite:config         externalConditions: [ 'node' ],
  vite:config         extensions: [ '.mjs', '.js', '.ts', '.jsx', '.tsx', '.json' ],
  vite:config         dedupe: [],
  vite:config         noExternal: [],
  vite:config         external: [],
  vite:config         preserveSymlinks: false,
  vite:config         alias: [
  vite:config           {
  vite:config             find: /^\/?@vite\/env/,
  vite:config             replacement: '/@fs/Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/client/env.mjs'
  vite:config           },
  vite:config           {
  vite:config             find: /^\/?@vite\/client/,
  vite:config             replacement: '/@fs/Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/client/client.mjs'
  vite:config           }
  vite:config         ],
  vite:config         mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ],
  vite:config         conditions: [ 'module', 'browser', 'development|production' ],
  vite:config         builtins: []
  vite:config       },
  vite:config       keepProcessEnv: false,
  vite:config       consumer: 'client',
  vite:config       optimizeDeps: {
  vite:config         include: [],
  vite:config         exclude: [],
  vite:config         needsInterop: [],
  vite:config         extensions: [],
  vite:config         disabled: undefined,
  vite:config         holdUntilCrawlEnd: true,
  vite:config         force: false,
  vite:config         noDiscovery: false,
  vite:config         esbuildOptions: { preserveSymlinks: false }
  vite:config       },
  vite:config       dev: {
  vite:config         warmup: [],
  vite:config         sourcemap: { js: true },
  vite:config         sourcemapIgnoreList: [Function: isInNodeModules$1],
  vite:config         preTransformRequests: true,
  vite:config         createEnvironment: [Function: defaultCreateClientDevEnvironment],
  vite:config         recoverable: true,
  vite:config         moduleRunnerTransform: false
  vite:config       },
  vite:config       build: {
  vite:config         target: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari14' ],
  vite:config         polyfillModulePreload: true,
  vite:config         modulePreload: { polyfill: true },
  vite:config         outDir: 'dist',
  vite:config         assetsDir: 'assets',
  vite:config         assetsInlineLimit: 4096,
  vite:config         sourcemap: false,
  vite:config         terserOptions: {},
  vite:config         rollupOptions: {},
  vite:config         commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] },
  vite:config         dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] },
  vite:config         write: true,
  vite:config         emptyOutDir: null,
  vite:config         copyPublicDir: true,
  vite:config         manifest: false,
  vite:config         lib: false,
  vite:config         ssrManifest: false,
  vite:config         ssrEmitAssets: false,
  vite:config         reportCompressedSize: true,
  vite:config         chunkSizeWarningLimit: 500,
  vite:config         watch: null,
  vite:config         cssCodeSplit: true,
  vite:config         minify: 'esbuild',
  vite:config         ssr: false,
  vite:config         emitAssets: true,
  vite:config         createEnvironment: [Function: createEnvironment],
  vite:config         cssTarget: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari14' ],
  vite:config         cssMinify: true
  vite:config       }
  vite:config     },
  vite:config     ssr: {
  vite:config       define: undefined,
  vite:config       resolve: {
  vite:config         externalConditions: [ 'node' ],
  vite:config         extensions: [ '.mjs', '.js', '.ts', '.jsx', '.tsx', '.json' ],
  vite:config         dedupe: [],
  vite:config         noExternal: [],
  vite:config         external: [],
  vite:config         preserveSymlinks: false,
  vite:config         alias: [
  vite:config           {
  vite:config             find: /^\/?@vite\/env/,
  vite:config             replacement: '/@fs/Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/client/env.mjs'
  vite:config           },
  vite:config           {
  vite:config             find: /^\/?@vite\/client/,
  vite:config             replacement: '/@fs/Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/client/client.mjs'
  vite:config           }
  vite:config         ],
  vite:config         mainFields: [ 'module', 'jsnext:main', 'jsnext' ],
  vite:config         conditions: [ 'module', 'node', 'development|production' ],
  vite:config         builtins: [
  vite:config           '_http_agent',         '_http_client',        '_http_common',
  vite:config           '_http_incoming',      '_http_outgoing',      '_http_server',
  vite:config           '_stream_duplex',      '_stream_passthrough', '_stream_readable',
  vite:config           '_stream_transform',   '_stream_wrap',        '_stream_writable',
  vite:config           '_tls_common',         '_tls_wrap',           'assert',
  vite:config           'assert/strict',       'async_hooks',         'buffer',
  vite:config           'child_process',       'cluster',             'console',
  vite:config           'constants',           'crypto',              'dgram',
  vite:config           'diagnostics_channel', 'dns',                 'dns/promises',
  vite:config           'domain',              'events',              'fs',
  vite:config           'fs/promises',         'http',                'http2',
  vite:config           'https',               'inspector',           'inspector/promises',
  vite:config           'module',              'net',                 'os',
  vite:config           'path',                'path/posix',          'path/win32',
  vite:config           'perf_hooks',          'process',             'punycode',
  vite:config           'querystring',         'readline',            'readline/promises',
  vite:config           'repl',                'stream',              'stream/consumers',
  vite:config           'stream/promises',     'stream/web',          'string_decoder',
  vite:config           'sys',                 'timers',              'timers/promises',
  vite:config           'tls',                 'trace_events',        'tty',
  vite:config           'url',                 'util',                'util/types',
  vite:config           'v8',                  'vm',                  'wasi',
  vite:config           'worker_threads',      'zlib',                /^node:/,
  vite:config           /^npm:/,               /^bun:/
  vite:config         ]
  vite:config       },
  vite:config       keepProcessEnv: true,
  vite:config       consumer: 'server',
  vite:config       optimizeDeps: {
  vite:config         include: [],
  vite:config         exclude: [],
  vite:config         needsInterop: [],
  vite:config         extensions: [],
  vite:config         disabled: undefined,
  vite:config         holdUntilCrawlEnd: true,
  vite:config         force: false,
  vite:config         noDiscovery: true,
  vite:config         esbuildOptions: { preserveSymlinks: false }
  vite:config       },
  vite:config       dev: {
  vite:config         warmup: [],
  vite:config         sourcemap: { js: true },
  vite:config         sourcemapIgnoreList: [Function: isInNodeModules$1],
  vite:config         preTransformRequests: false,
  vite:config         createEnvironment: [Function: defaultCreateDevEnvironment],
  vite:config         recoverable: false,
  vite:config         moduleRunnerTransform: true
  vite:config       },
  vite:config       build: {
  vite:config         target: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari14' ],
  vite:config         polyfillModulePreload: true,
  vite:config         modulePreload: { polyfill: true },
  vite:config         outDir: 'dist',
  vite:config         assetsDir: 'assets',
  vite:config         assetsInlineLimit: 4096,
  vite:config         sourcemap: false,
  vite:config         terserOptions: {},
  vite:config         rollupOptions: {},
  vite:config         commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] },
  vite:config         dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] },
  vite:config         write: true,
  vite:config         emptyOutDir: null,
  vite:config         copyPublicDir: true,
  vite:config         manifest: false,
  vite:config         lib: false,
  vite:config         ssrManifest: false,
  vite:config         ssrEmitAssets: false,
  vite:config         reportCompressedSize: true,
  vite:config         chunkSizeWarningLimit: 500,
  vite:config         watch: null,
  vite:config         cssCodeSplit: true,
  vite:config         minify: false,
  vite:config         ssr: true,
  vite:config         emitAssets: false,
  vite:config         createEnvironment: [Function: createEnvironment],
  vite:config         cssTarget: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari14' ],
  vite:config         cssMinify: 'esbuild'
  vite:config       }
  vite:config     }
  vite:config   },
  vite:config   resolve: {
  vite:config     externalConditions: [ 'node' ],
  vite:config     extensions: [ '.mjs', '.js', '.ts', '.jsx', '.tsx', '.json' ],
  vite:config     dedupe: [],
  vite:config     noExternal: [],
  vite:config     external: [],
  vite:config     preserveSymlinks: false,
  vite:config     alias: [
  vite:config       {
  vite:config         find: /^\/?@vite\/env/,
  vite:config         replacement: '/@fs/Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/client/env.mjs'
  vite:config       },
  vite:config       {
  vite:config         find: /^\/?@vite\/client/,
  vite:config         replacement: '/@fs/Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/client/client.mjs'
  vite:config       }
  vite:config     ],
  vite:config     mainFields: [ 'browser', 'module', 'jsnext:main', 'jsnext' ],
  vite:config     conditions: [ 'module', 'browser', 'development|production' ],
  vite:config     builtins: []
  vite:config   },
  vite:config   configFile: '/Users/johndoe/Projects/vite-context-issue/vite.config.ts',
  vite:config   configFileDependencies: [ '/Users/johndoe/Projects/vite-context-issue/vite.config.ts' ],
  vite:config   inlineConfig: {
  vite:config     root: undefined,
  vite:config     base: undefined,
  vite:config     mode: undefined,
  vite:config     configFile: undefined,
  vite:config     configLoader: undefined,
  vite:config     logLevel: undefined,
  vite:config     clearScreen: undefined,
  vite:config     server: { host: undefined },
  vite:config     forceOptimizeDeps: undefined
  vite:config   },
  vite:config   root: '/Users/johndoe/Projects/vite-context-issue',
  vite:config   base: '/',
  vite:config   decodedBase: '/',
  vite:config   rawBase: '/',
  vite:config   publicDir: '/Users/johndoe/Projects/vite-context-issue/public',
  vite:config   cacheDir: '/Users/johndoe/Projects/vite-context-issue/node_modules/.vite',
  vite:config   command: 'serve',
  vite:config   mode: 'development',
  vite:config   isWorker: false,
  vite:config   mainConfig: null,
  vite:config   bundleChain: [],
  vite:config   isProduction: false,
  vite:config   css: {
  vite:config     transformer: 'postcss',
  vite:config     preprocessorMaxWorkers: 0,
  vite:config     devSourcemap: false,
  vite:config     lightningcss: undefined
  vite:config   },
  vite:config   json: { namedExports: true, stringify: 'auto' },
  vite:config   esbuild: { jsxDev: true },
  vite:config   builder: undefined,
  vite:config   preview: {
  vite:config     port: 4173,
  vite:config     strictPort: false,
  vite:config     host: undefined,
  vite:config     allowedHosts: [],
  vite:config     https: undefined,
  vite:config     open: false,
  vite:config     proxy: undefined,
  vite:config     cors: {
  vite:config       origin: /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/
  vite:config     },
  vite:config     headers: {}
  vite:config   },
  vite:config   envDir: '/Users/johndoe/Projects/vite-context-issue',
  vite:config   env: { BASE_URL: '/', MODE: 'development', DEV: true, PROD: false },
  vite:config   assetsInclude: [Function: assetsInclude],
  vite:config   logger: {
  vite:config     hasWarned: false,
  vite:config     info: [Function: info],
  vite:config     warn: [Function: warn],
  vite:config     warnOnce: [Function: warnOnce],
  vite:config     error: [Function: error],
  vite:config     clearScreen: [Function: clearScreen],
  vite:config     hasErrorLogged: [Function: hasErrorLogged]
  vite:config   },
  vite:config   packageCache: Map(1) {
  vite:config     'fnpd_/Users/johndoe/Projects/vite-context-issue' => {
  vite:config       dir: '/Users/johndoe/Projects/vite-context-issue',
  vite:config       data: {
  vite:config         name: 'vite-context-issue',
  vite:config         version: '1.0.0',
  vite:config         description: '',
  vite:config         main: 'index.js',
  vite:config         scripts: { test: 'echo "Error: no test specified" && exit 1' },
  vite:config         keywords: [],
  vite:config         author: '',
  vite:config         license: 'ISC',
  vite:config         packageManager: 'pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0',
  vite:config         dependencies: { vite: '^6.2.2' }
  vite:config       },
  vite:config       hasSideEffects: [Function: hasSideEffects],
  vite:config       setResolvedCache: [Function: setResolvedCache],
  vite:config       getResolvedCache: [Function: getResolvedCache]
  vite:config     },
  vite:config     set: [Function (anonymous)]
  vite:config   },
  vite:config   worker: { format: 'iife', plugins: '() => plugins', rollupOptions: {} },
  vite:config   appType: 'spa',
  vite:config   experimental: { importGlobRestoreExtension: false, hmrPartialAccept: false },
  vite:config   future: undefined,
  vite:config   ssr: {
  vite:config     target: 'node',
  vite:config     optimizeDeps: {
  vite:config       esbuildOptions: { preserveSymlinks: false },
  vite:config       include: [],
  vite:config       exclude: [],
  vite:config       needsInterop: [],
  vite:config       extensions: [],
  vite:config       holdUntilCrawlEnd: true,
  vite:config       force: false,
  vite:config       noDiscovery: true
  vite:config     },
  vite:config     external: [],
  vite:config     noExternal: [],
  vite:config     resolve: {
  vite:config       conditions: [ 'module', 'node', 'development|production' ],
  vite:config       externalConditions: [ 'node' ]
  vite:config     }
  vite:config   },
  vite:config   optimizeDeps: {
  vite:config     include: [],
  vite:config     exclude: [],
  vite:config     needsInterop: [],
  vite:config     extensions: [],
  vite:config     disabled: undefined,
  vite:config     holdUntilCrawlEnd: true,
  vite:config     force: false,
  vite:config     noDiscovery: false,
  vite:config     esbuildOptions: { preserveSymlinks: false }
  vite:config   },
  vite:config   dev: {
  vite:config     warmup: [],
  vite:config     sourcemap: { js: true },
  vite:config     sourcemapIgnoreList: [Function: isInNodeModules$1],
  vite:config     preTransformRequests: false,
  vite:config     createEnvironment: [Function: defaultCreateDevEnvironment],
  vite:config     recoverable: false,
  vite:config     moduleRunnerTransform: false
  vite:config   },
  vite:config   build: {
  vite:config     target: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari14' ],
  vite:config     polyfillModulePreload: true,
  vite:config     modulePreload: { polyfill: true },
  vite:config     outDir: 'dist',
  vite:config     assetsDir: 'assets',
  vite:config     assetsInlineLimit: 4096,
  vite:config     sourcemap: false,
  vite:config     terserOptions: {},
  vite:config     rollupOptions: { input: { home: 'home.html' } },
  vite:config     commonjsOptions: { include: [ /node_modules/ ], extensions: [ '.js', '.cjs' ] },
  vite:config     dynamicImportVarsOptions: { warnOnError: true, exclude: [ /node_modules/ ] },
  vite:config     write: true,
  vite:config     emptyOutDir: null,
  vite:config     copyPublicDir: true,
  vite:config     manifest: false,
  vite:config     lib: false,
  vite:config     ssrManifest: false,
  vite:config     ssrEmitAssets: false,
  vite:config     reportCompressedSize: true,
  vite:config     chunkSizeWarningLimit: 500,
  vite:config     watch: null,
  vite:config     cssCodeSplit: true,
  vite:config     minify: 'esbuild',
  vite:config     ssr: false,
  vite:config     emitAssets: false,
  vite:config     createEnvironment: [Function: createEnvironment],
  vite:config     cssTarget: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari14' ],
  vite:config     cssMinify: true
  vite:config   },
  vite:config   webSocketToken: 'M7nbqrIT8xPZ',
  vite:config   getSortedPlugins: [Function: getSortedPlugins],
  vite:config   getSortedPluginHooks: [Function: getSortedPluginHooks],
  vite:config   createResolver: [Function: createResolver],
  vite:config   fsDenyGlob: [Function: arrayMatcher],
  vite:config   safeModulePaths: Set(0) {},
  vite:config   additionalAllowedHosts: []
  vite:config } +5ms
(node:48844) ExperimentalWarning: CommonJS module /Users/johndoe/Projects/vite-context-issue/vite.config.ts is loading ES Module /Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/node/index.js using require().
Support for loading ES Module in require() is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
  vite:deps (client) Hash is consistent. Skipping. Use --force to override. +0ms
Port 5173 is in use, trying another one...

  VITE v6.2.2  ready in 82 ms

  ➜  Local:   http://localhost:5174/
  ➜  Network: use --host to expose
  ➜  press h + enter to show help
  vite:import-analysis 0.93ms [no imports] some-code?proxy +0ms
file:///Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/node/chunks/dep-B0fRCRkQ.js:47463
            throw Error(
                  ^

Error: [vite] The "code" property of ModuleInfo is not supported.
    at Object.get (file:///Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/node/chunks/dep-B0fRCRkQ.js:47463:19)
    at LoadPluginContext.load (/Users/johndoe/Projects/vite-context-issue/vite.config.ts:71:59)
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
    at async EnvironmentPluginContainer.load (file:///Users/johndoe/Projects/vite-context-issue/node_modules/.pnpm/vite@6.2.2/node_modules/vite/dist/node/chunks/dep-B0fRCRkQ.js:47621:22)
    at async /Users/johndoe/Projects/vite-context-issue/vite.config.ts:38:30

Node.js v23.3.0

Validations

  • Follow our Code of Conduct
    Read the docs.
    Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
    Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to vuejs/core instead.
    Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
    The provided reproduction is a minimal reproducible example of the bug.

Activity

added theissue type on Mar 18, 2025
changed the title [-]Incompatibility between Rollup and ViteDevServer contexts[/-] [+]`this.getModuleInfo().code` support in dev[/+] on Mar 19, 2025
changed the issue type fromtoon Mar 19, 2025
magne4000

magne4000 commented on Apr 3, 2025

@magne4000

I stumbled upon the same issue.
I'd like to add that, in this case, in dev, the failing this.load only returns { id: '...' } (so no importedIdResolutions for instance).
I feel that this is more a bug than a nice-to-have.

vladmiller

vladmiller commented on Apr 3, 2025

@vladmiller
Author

@magne4000 I feel the same, as right now this prevents me from proceeding with the plugin development.

Vite team is working on RollDown, that should in theory replace Rollup/eslint combination with a single environment – which, I suspect, in turn will resolve all these incompatibility issues between build & dev environments.

Rolldown is already at v1.0.0-beta.6 and there is a Vite fork that already uses Rolldown: https://github.com/vitejs/rolldown-vite

It's still early, but I guess it's already possible to give it a test-run for smaller non-critical projects.

magne4000

magne4000 commented on Apr 3, 2025

@magne4000

Related issue: #15411

magne4000

magne4000 commented on Apr 4, 2025

@magne4000

sapphi-red response on this subject with some insights:

The first step of rolldown-vite is to swap rollup & esbuild with rolldown and to keep the dev side architecture as-is. So that won't help in terms of supporting this API. The second step is to try bundling in dev and that might help.
You may find the information in the module graph. server.moduleGraph.

But getting the information of the imported files beforehand would be quite difficult in the current architecture as Vite does not wait for the imported files to be processed before processing the current file.
https://vite.dev/guide/api-javascript.html#vitedevserver:~:text=INFO,during%20cold%20start
If you can move the logic to the runtime side, I'll recommend to do so for dev.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @vladmiller@magne4000@sapphi-red

      Issue actions

        `this.getModuleInfo().code` support in dev · Issue #19674 · vitejs/vite