vite
vite copied to clipboard
[vite/plugin] The "attributes" property of ModuleInfo is not supported.
Describe the bug
When using this.getModuleInfo(id).attributes
in a plugin (for instance in transform
hook) the following error occurs :
[vite] The "attributes" property of ModuleInfo is not supported.
But the same code works in native Rollup plugins.
related issue: Support for moduleInfo.meta in resolveId hook still not equivalent in vite dev and vite build
Reproduction
https://stackblitz.com/edit/vitejs-vite-5et2xu?file=vite.config.js&terminal=dev
System Info
System:
OS: Linux 6.5 Fedora Linux 37 (Workstation Edition)
CPU: (16) x64 AMD Ryzen 9 5900HS with Radeon Graphics
Memory: 6.49 GB / 15.02 GB
Container: Yes
Shell: 5.9 - /usr/bin/zsh
Binaries:
Node: 20.10.0 - /usr/local/bin/node
Yarn: 1.22.21 - /usr/local/bin/yarn
npm: 10.2.3 - /usr/local/bin/npm
pnpm: 8.3.0 - ~/.local/share/pnpm/pnpm
Browsers:
Chrome: 120.0.6099.109
npmPackages:
vite: ^5.0.10 => 5.0.10
Used Package Manager
npm
Logs
Click to expand!
10:46:44 PM [vite] Internal server error: [vite] The "attributes" property of ModuleInfo is not supported.
Validations
- [X] Follow our Code of Conduct
- [X] Read the Contributing Guidelines.
- [X] Read the docs.
- [X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
- [X] 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.
- [X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
- [X] The provided reproduction is a minimal reproducible example of the bug.
This is breaking rollup-plugin-import-css-classes when running on Vite.
I created a package which currently supports only webpack but I would love to add support for Vite too.
Unfortunately I get The "code" property of ModuleInfo is not supported.
during vite dev:
https://github.com/vitejs/vite/blob/b240a8347e7b62bee9d2212625732bb0d8c78633/packages/vite/src/node/server/pluginContainer.ts#L214
The information I need is available but only behind a private api (this._container.moduleGraph.idToModuleMap.get(id).transformResult.code
)
With Webpack it is possible during dev and build https://webpack.js.org/api/loaders/#thisloadmodule to access the code
and attributes
of other modules
Is there anything I can do to support adding this feature?
It appears that the return value of this.load
differs between serve and build modes.
In serve mode, the moduleInfo
object only contains the id and meta properties, as seen in these lines:
https://github.com/vitejs/vite/blob/b240a8347e7b62bee9d2212625732bb0d8c78633/packages/vite/src/node/server/pluginContainer.ts#L200-L201
While we can manually obtain a ModuleNode
object using this._container.moduleGraph.getModuleById(id)
, the transformResult
remains null. This suggests that the module might not have been loaded or transformed at all.
In build mode, everything just works as expected.