Skip to content

Commit

Permalink
Add .Defines to js.Build options
Browse files Browse the repository at this point in the history
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
  • Loading branch information
bep committed Jul 17, 2020
1 parent 084624b commit 35011bc
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
14 changes: 13 additions & 1 deletion resources/resource_transformers/js/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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

Expand All @@ -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
}

Expand All @@ -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)
Expand Down Expand Up @@ -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,
}
Expand Down
3 changes: 2 additions & 1 deletion resources/resource_transformers/js/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}

Expand All @@ -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: "",
})

Expand Down

0 comments on commit 35011bc

Please sign in to comment.