]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
js/esbuild: Don't try to resolve packages in /assets marked as external
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 22 Dec 2024 19:46:19 +0000 (20:46 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 22 Dec 2024 20:29:18 +0000 (21:29 +0100)
Fixes #13183

internal/js/esbuild/resolve.go
resources/resource_transformers/js/js_integration_test.go

index ac0010da92e7bf979fd3b2dc5c96efcd40b7e895..8ceec97efc6e483b9ff5229e77e504826f2103e2 100644 (file)
@@ -167,6 +167,17 @@ func createBuildPlugins(rs *resources.Spec, assetsResolver *fsResolver, depsMana
                        }
                }
 
+               for _, ext := range opts.Externals {
+                       // ESBuild will do a more thorough check for packages resolved in node_modules,
+                       // but we need to make sure that we don't try to resolve these in the /assets folder.
+                       if ext == impPath {
+                               return api.OnResolveResult{
+                                       Path:     impPath,
+                                       External: true,
+                               }, nil
+                       }
+               }
+
                if opts.ImportOnResolveFunc != nil {
                        if s := opts.ImportOnResolveFunc(impPath, args); s != "" {
                                return api.OnResolveResult{Path: s, Namespace: NsHugoImportResolveFunc}, nil
index c62312ef5665d2ce284ccce75a8a68506baa7aeb..9cee19a8659b2b47ca1ab5d76317bd2edb1b3291 100644 (file)
@@ -391,3 +391,32 @@ class A {}
                }).Build()
        b.AssertFileContent("public/js/main.js", "__decorateClass")
 }
+
+// Issue 13183.
+func TestExternalsInAssets(t *testing.T) {
+       files := `
+-- assets/js/util1.js --
+export function hello1() {
+       return 'abcd';
+}
+-- assets/js/util2.js --
+export function hello2() {
+       return 'efgh';
+}
+-- assets/js/main.js --
+import { hello1 } from './util1.js';
+import { hello2 } from './util2.js';
+
+hello1();
+hello2();
+-- layouts/index.html --
+Home.
+{{ $js := resources.Get "js/main.js" | js.Build (dict "externals" (slice "./util1.js")) }}
+{{ $js.Publish }}
+`
+
+       b := hugolib.Test(t, files, hugolib.TestOptOsFs())
+
+       b.AssertFileContent("public/js/main.js", "efgh")
+       b.AssertFileContent("public/js/main.js", "! abcd")
+}