diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-07-17 19:36:09 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-07-17 20:09:09 +0300 |
commit | 35011bcb26b6fcfcbd77dc05aa8246ca45b2c2ba (patch) | |
tree | 80bb9eb048a88ab125a083d0bb25a37ef370a069 /resources | |
parent | 084624baaceb436ef376c635253b1394d4c4f4d7 (diff) |
Add .Defines to js.Build options
This is needed to import `react` as a library, e.g.:
```
{{ $jsx := resources.Get "index.jsx" }}
{{ $options := dict "defines" (dict "process.env.NODE_ENV" "\"development\"") }}
{{ $js := $jsx | js.Build $options }}
```
Fixes #7489
Diffstat (limited to 'resources')
-rw-r--r-- | resources/resource_transformers/js/build.go | 14 | ||||
-rw-r--r-- | resources/resource_transformers/js/build_test.go | 3 |
2 files changed, 15 insertions, 2 deletions
diff --git a/resources/resource_transformers/js/build.go b/resources/resource_transformers/js/build.go index c48778692..df8cdde1d 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 3f2a1e104..b28f66a43 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: "", }) |