Skip to content

virtual plugin creates files that are ignored by any plugin that uses createFilter #1680

@fserb

Description

@fserb
  • Rollup Plugin Name: virtual
  • Rollup Plugin Version: 3.0.2
  • Rollup Version: 4.11.0
  • Link to reproduction:
const bundle = await rollup({
  input: "virtual_main.js",
  plugins: [
    virtual({ "virtual_main.js": "console.log(1);" }),
    strip()
  ],
});

Expected Behavior

strip() runs on the code passed.

Actual Behavior

This looks like very legitimate code (rollup will output the content of virtual_main eventually). But strip() (or SWC, Terser, Babel, or any other plugin that relies on CreateFilter) will be silently ignored, because virtual appends a \x00virtual: prefix to all files, that then always returns false on CreateFilter.

See also bug #749.

Additional Information

As the previous bug suggests, removing the \x00 on CreateFilter may cause regressions, as well as removing it from virtual (although I'd assume it's a much more reasonable change). If both those ideas are bad, then could I suggest allowing a prefix option to virtual, that allows folks to change this?

virtual seems to be the only official way to support rollup being called with a string (instead of a file), and it's completely broken as is. Without regressing anything, adding a prefix option to virtual and having some documentation that calls out that any filter that has include/exclude doesn't work with the default option sounds better.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions