From 132a6fc6528c05a6c4460fdd0335d4a13a8e7e30 Mon Sep 17 00:00:00 2001 From: David Biddle Date: Wed, 15 Jan 2025 16:06:20 +0000 Subject: [PATCH] Load govuk-frontend Sass with NodePackageImporter There's [a bug in the way Vite's inbuilt sass importing works](https://github.com/vitejs/vite/issues/19196) that means some of our assets don't build properly if we import the govuk-frontend styles using the @GOVUK alias. We can get around this by using Sass's builtin NodePackageImporter to import the govuk-frontend styles. This bypasses the Vite import code that causes the issue. It's also better for a couple of other reasons. It makes it clear that this import is coming from an npm package (which was obscured slightly when we were using the alias). It also makes us resilient to structure changes in the govuk-frontend package (NodePackageImporter uses the 'sass' field in govuk-frontend's package.json to determine the file to import, so we no longer need to point to a specific file which could change). --- app/frontend/entrypoints/application.scss | 2 +- vite.config.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/frontend/entrypoints/application.scss b/app/frontend/entrypoints/application.scss index d03280a09..ce190bc16 100644 --- a/app/frontend/entrypoints/application.scss +++ b/app/frontend/entrypoints/application.scss @@ -2,7 +2,7 @@ $govuk-images-path: "@govuk/assets/images/"; $govuk-fonts-path: "@govuk/assets/fonts/"; $govuk-global-styles: true; -@import "@govuk/all"; +@import "pkg:govuk-frontend"; @import "dfe-autocomplete/src/dfe-autocomplete"; @import "../../components/form_header_component/"; @import "../styles/app-panel"; diff --git a/vite.config.js b/vite.config.js index a6e1323f1..7166249a4 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,6 +1,7 @@ import { defineConfig } from 'vite' import RubyPlugin from 'vite-plugin-ruby' import * as path from 'node:path' +import { NodePackageImporter } from 'sass' export default defineConfig({ plugins: [RubyPlugin()], @@ -9,7 +10,7 @@ export default defineConfig({ preprocessorOptions: { scss: { api: 'modern', - loadPaths: ['./node_modules/govuk-frontend/'], + importers: [new NodePackageImporter()], quietDeps: true }, devSourcemaps: true