diff options
-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") +} |