diff options
Diffstat (limited to 'resources/resource_transformers/cssjs')
3 files changed, 79 insertions, 5 deletions
diff --git a/resources/resource_transformers/cssjs/postcss.go b/resources/resource_transformers/cssjs/postcss.go index 1a9e01142..98bdc9249 100644 --- a/resources/resource_transformers/cssjs/postcss.go +++ b/resources/resource_transformers/cssjs/postcss.go @@ -69,7 +69,6 @@ func (c *PostCSSClient) Process(res resources.ResourceTransformer, options map[s } type InlineImports struct { - // Service `mapstructure:",squash"` // Enable inlining of @import statements. // Does so recursively, but currently once only per file; // that is, it's not possible to import the same file in @@ -78,6 +77,11 @@ type InlineImports struct { // so you can have @import anywhere in the file. InlineImports bool + // See issue https://github.com/gohugoio/hugo/issues/13719 + // Disable inlining of @import statements + // This is currenty only used for css.TailwindCSS. + DisableInlineImports bool + // When InlineImports is enabled, we fail the build if an import cannot be resolved. // You can enable this to allow the build to continue and leave the import statement in place. // Note that the inline importer does not process url location or imports with media queries, diff --git a/resources/resource_transformers/cssjs/tailwindcss.go b/resources/resource_transformers/cssjs/tailwindcss.go index beda7a646..a60a16222 100644 --- a/resources/resource_transformers/cssjs/tailwindcss.go +++ b/resources/resource_transformers/cssjs/tailwindcss.go @@ -129,9 +129,11 @@ func (t *tailwindcssTransformation) Transform(ctx *resources.ResourceTransformat t.rs.Assets.Fs, t.rs.Logger, ctx.DependencyManager, ) - src, err = imp.resolve() - if err != nil { - return err + if !options.InlineImports.DisableInlineImports { + src, err = imp.resolve() + if err != nil { + return err + } } go func() { @@ -146,7 +148,11 @@ func (t *tailwindcssTransformation) Transform(ctx *resources.ResourceTransformat Cause: err, } } - return imp.toFileError(errBuf.String()) + s := errBuf.String() + if options.InlineImports.DisableInlineImports && strings.Contains(s, "Can't resolve") { + s += "You may want to set the 'disableInlineImports' option to false to inline imports, see https://gohugo.io/functions/css/tailwindcss/#disableinlineimports" + } + return imp.toFileError(s) } return nil diff --git a/resources/resource_transformers/cssjs/tailwindcss_integration_test.go b/resources/resource_transformers/cssjs/tailwindcss_integration_test.go index ae70042a0..734ffe759 100644 --- a/resources/resource_transformers/cssjs/tailwindcss_integration_test.go +++ b/resources/resource_transformers/cssjs/tailwindcss_integration_test.go @@ -17,6 +17,7 @@ import ( "testing" "github.com/bep/logg" + qt "github.com/frankban/quicktest" "github.com/gohugoio/hugo/htesting" "github.com/gohugoio/hugo/hugolib" ) @@ -70,3 +71,66 @@ CSS: {{ $css.Content | safeCSS }}| b.AssertFileContent("public/index.html", "/*! tailwindcss v4.") } + +func TestTailwindCSSNoInlineImportsIssue13719(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['page','rss','section','sitemap','taxonomy','term'] +theme = 'my-theme' + +[[module.mounts]] +source = 'assets' +target = 'assets' + +[[module.mounts]] +source = 'other' +target = 'assets/css' +-- assets/css/main.css -- +@import "tailwindcss"; + +@import "colors/red.css"; +@import "colors/blue.css"; +@import "colors/purple.css"; +-- assets/css/colors/red.css -- +@import "green.css"; + +.red {color: red;} +-- assets/css/colors/green.css -- +.green {color: green;} +-- themes/my-theme/assets/css/colors/blue.css -- +.blue {color: blue;} +-- other/colors/purple.css -- +.purple {color: purple;} +-- layouts/home.html -- +{{ with (templates.Defer (dict "key" "global")) }} + {{ with resources.Get "css/main.css" }} + {{ $opts := dict "disableInlineImports" true }} + {{ with . | css.TailwindCSS $opts }} + <link rel="stylesheet" href="{{ .RelPermalink }}"> + {{ end }} + {{ end }} +{{ end }} +-- package.json -- +{ + "devDependencies": { + "@tailwindcss/cli": "^4.1.7", + "tailwindcss": "^4.1.7" + } +} +` + + b, err := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: t, + TxtarString: files, + NeedsOsFS: true, + NeedsNpmInstall: true, + LogLevel: logg.LevelInfo, + }).BuildE() + + b.Assert(err, qt.IsNotNil) + b.Assert(err.Error(), qt.Contains, "Can't resolve 'colors/red.css'") + b.Assert(err.Error(), qt.Contains, "You may want to set the 'disableInlineImports' option to false") +} |