diff --git a/internal/bundler_tests/bundler_default_test.go b/internal/bundler_tests/bundler_default_test.go index 84f8b6ecb8..1cdc11188b 100644 --- a/internal/bundler_tests/bundler_default_test.go +++ b/internal/bundler_tests/bundler_default_test.go @@ -1400,6 +1400,21 @@ func TestHashbangNoBundle(t *testing.T) { }) } +func TestHashbangUnsupported(t *testing.T) { + default_suite.expectBundled(t, bundled{ + files: map[string]string{ + "/entry.js": `#!/usr/bin/env node + process.exit(0); + `, + }, + entryPaths: []string{"/entry.js"}, + options: config.Options{ + AbsOutputFile: "/out.js", + UnsupportedJSFeatures: compat.Hashbang, + }, + }) +} + func TestHashbangBannerUseStrictOrder(t *testing.T) { default_suite.expectBundled(t, bundled{ files: map[string]string{ diff --git a/internal/bundler_tests/snapshots/snapshots_default.txt b/internal/bundler_tests/snapshots/snapshots_default.txt index ad869cd413..d03f9bcd46 100644 --- a/internal/bundler_tests/snapshots/snapshots_default.txt +++ b/internal/bundler_tests/snapshots/snapshots_default.txt @@ -1795,6 +1795,11 @@ TestHashbangNoBundle #!/usr/bin/env node process.exit(0); +================================================================================ +TestHashbangUnsupported +---------- /out.js ---------- +process.exit(0); + ================================================================================ TestIIFE_ES5 ---------- /out.js ---------- diff --git a/internal/linker/linker.go b/internal/linker/linker.go index 931cc672fd..66a3a51a2b 100644 --- a/internal/linker/linker.go +++ b/internal/linker/linker.go @@ -5678,7 +5678,7 @@ func (c *linkerContext) generateChunkJS(chunkIndex int, chunkWaitGroup *sync.Wai // Start with the hashbang if there is one. This must be done before the // banner because it only works if it's literally the first character. - if chunk.isEntryPoint { + if chunk.isEntryPoint && !c.options.UnsupportedJSFeatures.Has(compat.Hashbang) { if repr := c.graph.Files[chunk.sourceIndex].InputFile.Repr.(*graph.JSRepr); repr.AST.Hashbang != "" { hashbang := repr.AST.Hashbang + "\n" prevOffset.AdvanceString(hashbang)