vitejs / vite

Next generation frontend tooling. It's fast!
http://vitejs.dev
MIT License
65.97k stars 5.88k forks source link

Use the modern SASS compiler API #7116

Open KaelWD opened 2 years ago

KaelWD commented 2 years ago

Clear and concise description of the problem

sass-loader v12.5 added an option to switch to sass.compileAsync instead of the old sass.render, allowing for use of the new Importer interface which supports @use

https://github.com/webpack-contrib/sass-loader#api

Suggested solution

Either switch to compileAsync (breaking change though) or add a similar option as the webpack plugin for people who need the new API.

Alternative

No response

Additional context

Related: #3180

Validations

bluwy commented 2 years ago

I think we would be using sass.compileString instead since sass.compile reads from the filesystem. I looked into the types, and it looks like the options for compileString extends from render, so maybe it's not a breaking change if we alternate between compileString and render depending on which API is available.

Related: https://github.com/vitejs/vite/issues/6734.

ygj6 commented 2 years ago

FYI, I made a simple attempt to support SASS modern API #7170

pvanagtmaal commented 1 year ago

Hi! What is the status on this issue?

danieka commented 5 months ago

@ygj @KaelWD @bluwy @sapphi-red You might already have seen this, but https://github.com/sass/sass/issues/3247 was recently resolved and it seems like the speed improvements could be significant. Just as a friendly FYI 😄

john-easci commented 2 months ago

@sapphi-red

Wanted to ref a non-breaking change for this ( #14689 ).

If we allow both legacy and modern modes with a super-simple flag in the config, then it should be a point fix which would be great to get earlier, since it is both a performance and a functionality issue.

sapphi-red commented 1 month ago

Definitely, I forgot why I put the label.

sapphi-red commented 1 month ago

If I understand correctly, the blockers on upstream are all gone and just needs someone to implement it.