diff options
author | 2023-04-10 11:14:30 -0700 | |
---|---|---|
committer | 2023-04-10 11:58:19 -0700 | |
commit | ce89372ebdb4ead337b32975886735a44e857b7a (patch) | |
tree | db7c0e89724be8a8eb1ee82f305e8adb4cf57638 | |
parent | 7a310b4c310bb727e455bc82a51d26d5a29ec621 (diff) | |
download | bun-ce89372ebdb4ead337b32975886735a44e857b7a.tar.gz bun-ce89372ebdb4ead337b32975886735a44e857b7a.tar.zst bun-ce89372ebdb4ead337b32975886735a44e857b7a.zip |
run files with non-js extensions
-rw-r--r-- | src/bun.js/module_loader.zig | 8 | ||||
-rw-r--r-- | src/cli.zig | 29 | ||||
-rw-r--r-- | src/cli/build_command.zig | 6 |
3 files changed, 22 insertions, 21 deletions
diff --git a/src/bun.js/module_loader.zig b/src/bun.js/module_loader.zig index 86d17a4ed..88b065727 100644 --- a/src/bun.js/module_loader.zig +++ b/src/bun.js/module_loader.zig @@ -1476,7 +1476,13 @@ pub const ModuleLoader = struct { &display_specifier, ); const path = Fs.Path.init(specifier); - const loader = jsc_vm.bundler.options.loaders.get(path.name.ext) orelse options.Loader.file; + const loader = jsc_vm.bundler.options.loaders.get(path.name.ext) orelse brk: { + if (strings.eqlLong(specifier, jsc_vm.main, true)) { + break :brk options.Loader.js; + } + + break :brk options.Loader.file; + }; var promise: ?*JSC.JSInternalPromise = null; ret.* = ErrorableResolvedSource.ok( ModuleLoader.transpileSourceCode( diff --git a/src/cli.zig b/src/cli.zig index f9c3f403f..6deb8062b 100644 --- a/src/cli.zig +++ b/src/cli.zig @@ -1331,18 +1331,9 @@ pub const Command = struct { } var was_js_like = false; - // If we start bun with: - // 1. `bun foo.js`, assume it's a JavaScript file. - // 2. `bun /absolute/path/to/bin/foo` assume its a JavaScript file. - // ^ no file extension - // - // #!/usr/bin/env bun - // will pass us an absolute path to the script. - // This means a non-standard file extension will not work, but that is better than the current state - // which is file extension-less doesn't work - const default_loader = options.defaultLoaders.get(extension) orelse brk: { + const default_loader: options.Loader = options.defaultLoaders.get(extension) orelse brk: { if (extension.len == 0 and ctx.args.entry_points.len > 0 and ctx.args.entry_points[0].len > 0 and std.fs.path.isAbsolute(ctx.args.entry_points[0])) { - break :brk options.Loader.js; + break :brk .js; } if (extension.len > 0) { @@ -1351,22 +1342,20 @@ pub const Command = struct { } if (ctx.preloads.len > 0) - break :brk options.Loader.js; + break :brk .js; } - break :brk null; + break :brk .js; }; const force_using_bun = ctx.debug.run_in_bun; var did_check = false; - if (default_loader) |loader| { - if (loader.canBeRunByBun()) { - was_js_like = true; - if (maybeOpenWithBunJS(&ctx)) { - return; - } - did_check = true; + if (default_loader.canBeRunByBun()) { + was_js_like = true; + if (maybeOpenWithBunJS(&ctx)) { + return; } + did_check = true; } if (force_using_bun and !did_check) { diff --git a/src/cli/build_command.zig b/src/cli/build_command.zig index 1b8e5c632..6b2a6761e 100644 --- a/src/cli/build_command.zig +++ b/src/cli/build_command.zig @@ -54,6 +54,12 @@ pub const BuildCommand = struct { this_bundler.options.code_splitting = ctx.bundler_options.code_splitting; this_bundler.resolver.opts.code_splitting = ctx.bundler_options.code_splitting; + if (this_bundler.options.entry_points.len > 1 and ctx.bundler_options.outdir.len == 0) { + Output.prettyErrorln("<red>error<r>: must use \"outdir\" when there are multiple input files", .{}); + Global.exit(1); + return; + } + this_bundler.configureLinker(); // This step is optional |