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
 
                        fromPath := ev.Name
 
-                       relPath := sourceFs.MakePathRelative(fromPath)
+                       relPath, found := sourceFs.MakePathRelative(fromPath)
 
-                       if relPath == "" {
+                       if !found {
                                // Not member of this virtual host.
                                continue
                        }
 
 // It will return an empty string if the filename is not a member of a static filesystem.
 func (s SourceFilesystems) MakeStaticPathRelative(filename string) string {
        for _, staticFs := range s.Static {
-               rel := staticFs.MakePathRelative(filename)
+               rel, _ := staticFs.MakePathRelative(filename)
                if rel != "" {
                        return rel
                }
 }
 
 // MakePathRelative creates a relative path from the given filename.
-// It will return an empty string if the filename is not a member of this filesystem.
-func (d *SourceFilesystem) MakePathRelative(filename string) string {
+func (d *SourceFilesystem) MakePathRelative(filename string) (string, bool) {
 
        for _, dir := range d.Dirs {
                meta := dir.(hugofs.FileMetaInfo).Meta()
                        if mp := meta.Path(); mp != "" {
                                rel = filepath.Join(mp, rel)
                        }
-                       return strings.TrimPrefix(rel, filePathSeparator)
+                       return strings.TrimPrefix(rel, filePathSeparator), true
                }
        }
-       return ""
+       return "", false
 }
 
 func (d *SourceFilesystem) RealFilename(rel string) string {
 
        sfs := bfs.Static[""]
        c.Assert(sfs, qt.Not(qt.IsNil))
 
-       c.Assert(sfs.MakePathRelative(filepath.Join(workDir, "dist", "d1", "foo.txt")), qt.Equals, filepath.FromSlash("mydist/d1/foo.txt"))
-       c.Assert(sfs.MakePathRelative(filepath.Join(workDir, "static", "d2", "foo.txt")), qt.Equals, filepath.FromSlash("d2/foo.txt"))
-       c.Assert(sfs.MakePathRelative(filepath.Join(workDir, "dust", "d3", "foo.txt")), qt.Equals, filepath.FromSlash("foo/bar/d3/foo.txt"))
+       makeRel := func(s string) string {
+               r, _ := sfs.MakePathRelative(s)
+               return r
+       }
+
+       c.Assert(makeRel(filepath.Join(workDir, "dist", "d1", "foo.txt")), qt.Equals, filepath.FromSlash("mydist/d1/foo.txt"))
+       c.Assert(makeRel(filepath.Join(workDir, "static", "d2", "foo.txt")), qt.Equals, filepath.FromSlash("d2/foo.txt"))
+       c.Assert(makeRel(filepath.Join(workDir, "dust", "d3", "foo.txt")), qt.Equals, filepath.FromSlash("foo/bar/d3/foo.txt"))
 
 }
 
 
        )
 
        for _, ev := range events {
-               if assetsFilename := s.BaseFs.Assets.MakePathRelative(ev.Name); assetsFilename != "" {
+               if assetsFilename, _ := s.BaseFs.Assets.MakePathRelative(ev.Name); assetsFilename != "" {
                        cachePartitions = append(cachePartitions, resources.ResourceKeyPartitions(assetsFilename)...)
                        if evictCSSRe == nil {
                                if cssFileRe.MatchString(assetsFilename) || cssConfigRe.MatchString(assetsFilename) {
 
        "io/ioutil"
        "path/filepath"
        "strings"
-       "sync"
 
        "github.com/pkg/errors"
 
        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,
 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)
                }
                        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
        }
 
                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},
 
                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.