`// [vite-plugin-dynamic-import] runtime -S-` header missing in compiled source
Using createServer are there any scenarios where this plugin would not add // [vite-plugin-dynamic-import] runtime -S- to the compiled source code?
I'm running into a situation where this plugin seems to be outputting the // [vite-plugin-dynamic-import] runtime -S- header (and rest of the dynamic code) to the compiled files in some circumstances, but not others, using the same application code.
Have you seen this before?
👋 Hey! @shellscape nice to meet you here.
I'm not sure what your source code looks like, but this plugin will only fix some edge cases that Vite/Rollup can't handle (that would definitely have // [vite-plugin-dynamic-import] runtime -S-).
If the importee part of import() in the source code can be correctly processed by Vite/Rollup, then // [vite-plugin-dynamic-import] runtime -S- will not be generated.
Ah that's interesting. That would be a nice bit of info for the readme!
In Vite, only if importee can be resolved normally by resolve(), it can be regarded as a valid import() statement. However, resolve() has many internal restrictions, which leads to the inability to handle many edge scenarios. .
source code is here 👉 https://github.com/vitejs/vite/blob/v4.4.11/packages/vite/src/node/plugins/dynamicImportVars.ts#L106-L109
I list some examples of what are considered "edge cases" that need to be handled by vite-plugin-dynamic-import.
// 1. Absolute path are confused with alias, `/root/src` is an alias.
import(`/root/src/views/${id}`)
// 2. Missing slash after `./views`
import(`./views${id}.tsx`)
// 3. Contains both aliases and operations
import('@/views/' + 'foo.js')
// 4. Only aliases and no file extension
import(`@/${id}`)
You can see them in the test files. 👉 test/fixtures/src/main.ts, and output is here 👉 test/fixtures/snapshots/main.ts