vaadin / flow

Vaadin Flow is a Java framework binding Vaadin web components to Java. This is part of Vaadin 10+.
Apache License 2.0
604 stars 166 forks source link

Include `.scss` and `.sass` in `stats.json` hashes #19527

Open oliveryasuna opened 3 months ago

oliveryasuna commented 3 months ago

Describe your motivation

We use SASS (.scss) stylesheets under /frontend/styles. These are imported and fully supported by Vite. It seems that the vaadin:stats Vite plugin does not generate hashes for them and store in stats.json#frontendHashes. Because of this, even with prod.bundle, the Vaadin Maven/Gradle plugins think there are new files, and thus, do not use the existing bundle.

Describe the solution you'd like

const projectFileExtensions = ['.js', '.js.map', '.ts', '.ts.map', '.tsx', '.tsx.map', '.css', '.css.map']; needs to also support .scss and .sass.

Is there a reason those file extensions are not already included? If not, happy to contribute this simple PR.

Describe alternatives you've considered

I could write a Vite plugin that computes and adds the hashes.

I could create a Gradle task that compiles the SASS files and outputs them to /frontend/styles.

Both options seem messy.

Additional context

I discovered this while investigating ways to speed up our builds, in lieu of Vaadin's proper Gradle caching support. https://github.com/vaadin/flow/issues/17941

This idea came from our recent endeavour to speed up builds. Relevant issues:

steve-todorov commented 3 months ago

In addition to scss and sass extensions, people might also use less so might be beneficial to add it to the extension list as well.

oliveryasuna commented 3 months ago

Maybe extensions should be customizable with an include/exclude pattern.

oliveryasuna commented 3 months ago

I opened a draft PR to demonstrate my proposal: https://github.com/vaadin/flow/pull/19550