From a08a8b0303547cbd41f1aff869e7adc30d345232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 22 Dec 2024 20:46:19 +0100 Subject: [PATCH] js/esbuild: Don't try to resolve packages in /assets marked as external Fixes #13183 --- internal/js/esbuild/resolve.go | 11 +++++++ .../js/js_integration_test.go | 29 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/internal/js/esbuild/resolve.go b/internal/js/esbuild/resolve.go index ac0010da92e..8ceec97efc6 100644 --- a/internal/js/esbuild/resolve.go +++ b/internal/js/esbuild/resolve.go @@ -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 diff --git a/resources/resource_transformers/js/js_integration_test.go b/resources/resource_transformers/js/js_integration_test.go index c62312ef566..9cee19a8659 100644 --- a/resources/resource_transformers/js/js_integration_test.go +++ b/resources/resource_transformers/js/js_integration_test.go @@ -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") +}