vite icon indicating copy to clipboard operation
vite copied to clipboard

[vite/plugin] The "attributes" property of ModuleInfo is not supported.

Open vdegenne opened this issue 1 year ago • 4 comments

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

vdegenne avatar Dec 22 '23 21:12 vdegenne

This is breaking rollup-plugin-import-css-classes when running on Vite.

Kycermann avatar May 07 '24 10:05 Kycermann

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?

jantimon avatar Jul 23 '24 19:07 jantimon

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.

swwind avatar Aug 08 '24 15:08 swwind