diff --git a/resources/resource_transformers/js/build.go b/resources/resource_transformers/js/build.go index c48778692e5..df8cdde1d13 100644 --- a/resources/resource_transformers/js/build.go +++ b/resources/resource_transformers/js/build.go @@ -19,6 +19,8 @@ import ( "path" "strings" + "github.com/spf13/cast" + "github.com/gohugoio/hugo/helpers" "github.com/gohugoio/hugo/hugolib/filesystems" "github.com/gohugoio/hugo/media" @@ -50,6 +52,9 @@ type Options struct { // External dependencies, e.g. "react". Externals []string `hash:"set"` + // User defined symbols. + Defines map[string]interface{} + // What to use instead of React.createElement. JSXFactory string @@ -66,10 +71,11 @@ type internalOptions struct { Externals []string `hash:"set"` + Defines map[string]string + // These are currently not exposed in the public Options struct, // but added here to make the options hash as stable as possible for // whenever we do. - Defines map[string]string TSConfig string } @@ -78,6 +84,7 @@ func DecodeOptions(m map[string]interface{}) (opts Options, err error) { return } err = mapstructure.WeakDecode(m, &opts) + err = mapstructure.WeakDecode(m, &opts) if opts.TargetPath != "" { opts.TargetPath = helpers.ToSlashTrimLeading(opts.TargetPath) @@ -210,11 +217,16 @@ func toInternalOptions(opts Options) internalOptions { if target == "" { target = defaultTarget } + var defines map[string]string + if opts.Defines != nil { + defines = cast.ToStringMapString(opts.Defines) + } return internalOptions{ TargetPath: opts.TargetPath, Minify: opts.Minify, Target: target, Externals: opts.Externals, + Defines: defines, JSXFactory: opts.JSXFactory, JSXFragment: opts.JSXFragment, } diff --git a/resources/resource_transformers/js/build_test.go b/resources/resource_transformers/js/build_test.go index 3f2a1e104b7..b28f66a431e 100644 --- a/resources/resource_transformers/js/build_test.go +++ b/resources/resource_transformers/js/build_test.go @@ -42,6 +42,7 @@ func TestToInternalOptions(t *testing.T) { JSXFactory: "v3", JSXFragment: "v4", Externals: []string{"react"}, + Defines: map[string]interface{}{"process.env.NODE_ENV": "production"}, Minify: true, } @@ -52,7 +53,7 @@ func TestToInternalOptions(t *testing.T) { JSXFactory: "v3", JSXFragment: "v4", Externals: []string{"react"}, - Defines: nil, + Defines: map[string]string{"process.env.NODE_ENV": "production"}, TSConfig: "", })