1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-26 00:59:24 -05:00

fix(cli): bundle command support shebang file (#17113)

This commit is contained in:
Fenix 2023-01-04 00:19:28 +08:00 committed by Bartek Iwańczuk
parent 822173664e
commit 211a8b438a
No known key found for this signature in database
GPG key ID: 0C6BCDDC3B3AD750
4 changed files with 39 additions and 2 deletions

View file

@ -470,4 +470,9 @@ mod bundle {
http_server: true, http_server: true,
exit_code: 1, exit_code: 1,
}); });
itest!(bundle_shebang_file {
args: "bundle subdir/shebang_file.js",
output: "bundle/shebang_file.bundle.out",
});
} }

View file

@ -0,0 +1,10 @@
[WILDCARD]
#!/usr/bin/env -S deno run --allow-read
// deno-fmt-ignore-file
// deno-lint-ignore-file
// This code was bundled using `deno bundle` and it's not recommended to edit it manually
for (const item of Deno.readDirSync(".")){
console.log(item.name);
}

View file

@ -0,0 +1,5 @@
#!/usr/bin/env -S deno run --allow-read
for (const item of Deno.readDirSync(".")) {
console.log(item.name);
}

View file

@ -147,12 +147,29 @@ fn bundle_module_graph(
} }
} }
deno_emit::bundle_graph( let mut output = deno_emit::bundle_graph(
graph, graph,
deno_emit::BundleOptions { deno_emit::BundleOptions {
bundle_type: deno_emit::BundleType::Module, bundle_type: deno_emit::BundleType::Module,
emit_options: ts_config_result.ts_config.into(), emit_options: ts_config_result.ts_config.into(),
emit_ignore_directives: true, emit_ignore_directives: true,
}, },
) )?;
// todo(https://github.com/denoland/deno_emit/issues/85): move to deno_emit
if let Some(shebang) = shebang_file(graph) {
output.code = format!("{}\n{}", shebang, output.code);
}
Ok(output)
}
fn shebang_file(graph: &deno_graph::ModuleGraph) -> Option<String> {
let source = graph.get(&graph.roots[0].0)?.maybe_source.as_ref()?;
let first_line = source.lines().next()?;
if first_line.starts_with("#!") {
Some(first_line.to_string())
} else {
None
}
} }