summaryrefslogtreecommitdiffstats
path: root/resources/resource_transformers/cssjs
diff options
context:
space:
mode:
Diffstat (limited to 'resources/resource_transformers/cssjs')
-rw-r--r--resources/resource_transformers/cssjs/postcss.go6
-rw-r--r--resources/resource_transformers/cssjs/tailwindcss.go14
-rw-r--r--resources/resource_transformers/cssjs/tailwindcss_integration_test.go64
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")
+}