vitejs/vite

Use the modern SASS compiler API

KaelWD opened this issue ยท 8 comments

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

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: #6734.

ygj6 commented

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

Hi! What is the status on this issue?

@ygj @KaelWD @bluwy @sapphi-red You might already have seen this, but sass/sass#3247 was recently resolved and it seems like the speed improvements could be significant. Just as a friendly FYI ๐Ÿ˜„

@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.

Definitely, I forgot why I put the label.

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

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

Yes, and in some cases, this should be a fix instead of improvements, because the current api is already deprecated, and some new features could not be configured.

For example, sass/dart-sass#2276 (comment)