diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-12-22 20:46:19 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-12-22 21:29:18 +0100 |
commit | 020253904f335643ead1c390f9fa52f24b185a3d (patch) | |
tree | c89e970e366a2e5191655d8a4919c1461d07d4c2 | |
parent | 4a5e94087ba2fe1405ad2edbcbeeccac2a6147a6 (diff) | |
download | hugo-020253904f335643ead1c390f9fa52f24b185a3d.tar.gz hugo-020253904f335643ead1c390f9fa52f24b185a3d.zip |
js/esbuild: Don't try to resolve packages in /assets marked as external
Fixes #13183
-rw-r--r-- | internal/js/esbuild/resolve.go | 11 | ||||
-rw-r--r-- | resources/resource_transformers/js/js_integration_test.go | 29 |
2 files changed, 40 insertions, 0 deletions
diff --git a/internal/js/esbuild/resolve.go b/internal/js/esbuild/resolve.go index ac0010da9..8ceec97ef 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 c62312ef5..9cee19a86 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") +} |