vitejs / vite

Next generation frontend tooling. It's fast!
http://vite.dev
MIT License
68.37k stars 6.17k forks source link

Add the ability to prevent transforming some assets files #16682

Open CGNonofr opened 5 months ago

CGNonofr commented 5 months ago

Description

In my app, I use the new URL('...', import.meta.url) syntax to get some assets URLs, including some CSS files. I then reference that asset in a document inside an iframe.

The problem is: vite is transforming my css files to resolve image references (url(<image path>)). While it's fine and expected in most cases, it's a big problem in my specific case, because the content of the css file is then digested by some code that already tries to resolve the real image urls inside the css at runtime.

I didn't find any way currently, even hacky, to prevent vite from trying to transform some asset files using the new URL(..., import.meta.url) syntax (except renaming the file to change its extension)

There is an assetsInclude option that seems to do what I want, but it doesn't seem to support the new URL(...) syntax as it seems to transform my asset to an html page displaying a Unexpected end of input error :thinking:

Suggested solution

I see 2 possible solutions:

Alternative

No response

Additional context

No response

Validations

CGNonofr commented 5 months ago

Just realized the build behavior is different than the dev behavior: in build mode, asset loaded with the new URL(...) syntax never get transformed, so a third solution can be to homogenize behaviors and consider it as a bug?

wmertens commented 3 months ago

I also would like ?raw&url to work. It is implemented here but doesn't support combining.

Furthermore, indeed dev and build behavior is different regarding post-processing.

I think the assets plugin should work as follows:

This way, you can choose whether to process the file or not.

Does that seem right?

wmertens commented 3 months ago

also, the placeholder should be something like http://__VITE_ASSET... so that is valid inside url() in css (see #17559)