js/esbuild: Don't try to resolve packages in /assets marked as external

Fixes #13183
This commit is contained in:
Bjørn Erik Pedersen 2024-12-22 20:46:19 +01:00
parent 4a5e94087b
commit 020253904f
2 changed files with 40 additions and 0 deletions

View 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

View 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")
}