diff options
author | Bjørn Erik Pedersen <[email protected]> | 2020-11-13 08:54:29 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-11-13 08:54:29 +0100 |
commit | 78f227b664d86c30fbb25f7a953b7ef8f2dacf13 (patch) | |
tree | 20c298b724513402830072a4d6768e6642851689 /resources/resource_transformers | |
parent | 5e03f644a4507f51bdbcdb42b65ce4e99095374f (diff) | |
download | hugo-78f227b664d86c30fbb25f7a953b7ef8f2dacf13.tar.gz hugo-78f227b664d86c30fbb25f7a953b7ef8f2dacf13.zip |
js: Let ESBuild handle all imports from node_modules
This commit fixes some issues where modules in /assets share the same name as in node_modules.
This was not intended, and with this commit the node_modules-components should be isolated. If you want to redefine something inside node_modules, use the `defines` option.
Fixes #7948
Diffstat (limited to 'resources/resource_transformers')
-rw-r--r-- | resources/resource_transformers/js/options.go | 44 | ||||
-rw-r--r-- | resources/resource_transformers/tocss/scss/tocss.go | 2 |
2 files changed, 11 insertions, 35 deletions
diff --git a/resources/resource_transformers/js/options.go b/resources/resource_transformers/js/options.go index 689efe0b4..fde6f5888 100644 --- a/resources/resource_transformers/js/options.go +++ b/resources/resource_transformers/js/options.go @@ -19,7 +19,6 @@ import ( "io/ioutil" "path/filepath" "strings" - "sync" "github.com/pkg/errors" @@ -113,11 +112,6 @@ func decodeOptions(m map[string]interface{}) (Options, error) { return opts, nil } -type importCache struct { - sync.RWMutex - m map[string]api.OnResolveResult -} - var extensionToLoaderMap = map[string]api.Loader{ ".js": api.LoaderJS, ".mjs": api.LoaderJS, @@ -141,16 +135,18 @@ func loaderFromFilename(filename string) api.Loader { func createBuildPlugins(c *Client, opts Options) ([]api.Plugin, error) { fs := c.rs.Assets - cache := importCache{ - m: make(map[string]api.OnResolveResult), - } - resolveImport := func(args api.OnResolveArgs) (api.OnResolveResult, error) { - isStdin := args.Importer == stdinImporter var relDir string if !isStdin { - relDir = filepath.Dir(fs.MakePathRelative(args.Importer)) + rel, found := fs.MakePathRelative(args.Importer) + if !found { + // Not in any of the /assets folders. + // This is an import from a node_modules, let + // ESBuild resolve this. + return api.OnResolveResult{}, nil + } + relDir = filepath.Dir(rel) } else { relDir = filepath.Dir(opts.sourcefile) } @@ -204,8 +200,7 @@ func createBuildPlugins(c *Client, opts Options) ([]api.Plugin, error) { return api.OnResolveResult{Path: m.Filename(), Namespace: nsImportHugo}, nil } - // Not found in /assets. Probably in node_modules. ESBuild will handle that - // rather complex logic. + // Fall back to ESBuild's resolve. return api.OnResolveResult{}, nil } @@ -214,26 +209,7 @@ func createBuildPlugins(c *Client, opts Options) ([]api.Plugin, error) { Setup: func(build api.PluginBuild) { build.OnResolve(api.OnResolveOptions{Filter: `.*`}, func(args api.OnResolveArgs) (api.OnResolveResult, error) { - // Try cache first. - cache.RLock() - v, found := cache.m[args.Path] - cache.RUnlock() - - if found { - return v, nil - } - - imp, err := resolveImport(args) - if err != nil { - return imp, err - } - - cache.Lock() - defer cache.Unlock() - - cache.m[args.Path] = imp - - return imp, nil + return resolveImport(args) }) build.OnLoad(api.OnLoadOptions{Filter: `.*`, Namespace: nsImportHugo}, diff --git a/resources/resource_transformers/tocss/scss/tocss.go b/resources/resource_transformers/tocss/scss/tocss.go index 20f0efbb9..fc7a19f33 100644 --- a/resources/resource_transformers/tocss/scss/tocss.go +++ b/resources/resource_transformers/tocss/scss/tocss.go @@ -76,7 +76,7 @@ func (t *toCSSTransformation) Transform(ctx *resources.ResourceTransformationCtx if prev == "stdin" { prevDir = baseDir } else { - prevDir = t.c.sfs.MakePathRelative(filepath.Dir(prev)) + prevDir, _ = t.c.sfs.MakePathRelative(filepath.Dir(prev)) if prevDir == "" { // Not a member of this filesystem. Let LibSASS handle it. |