mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
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
This commit is contained in:
parent
084624baac
commit
35011bcb26
2 changed files with 15 additions and 2 deletions
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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: "",
|
||||
})
|
||||
|
||||
|
|
Loading…
Reference in a new issue