The Bun bundler implements a set of default loaders out of the box. As a rule of thumb, the bundler and the runtime both support the same set of file types out of the box. `.js` `.cjs` `.mjs` `.mts` `.cts` `.ts` `.tsx` `.jsx` `.toml` `.json` `.txt` `.wasm` `.node` Bun uses the file extension to determine which built-in _loader_ should be used to parse the file. Every loader has a name, such as `js`, `tsx`, or `json`. These names are used when building [plugins](/docs/bundler/plugins) that extend Bun with custom loaders. ## Built-in loaders ### `js` **JavaScript**. Default for `.cjs` and `.mjs`. Parses the code and applies a set of default transforms, like dead-code elimination, tree shaking, and environment variable inlining. Note that Bun does not attempt to down-convert syntax at the moment. ### `jsx` **JavaScript + JSX.**. Default for `.js` and `.jsx`. Same as the `js` loader, but JSX syntax is supported. By default, JSX is downconverted to plain JavaScript; the details of how this is done depends on the `jsx*` compiler options in your `tsconfig.json`. Refer to the TypeScript documentation [on JSX](https://www.typescriptlang.org/docs/handbook/jsx.html) for more information. ### `ts` **TypeScript loader**. Default for `.ts`, `.mts`, and `.cts`. Strips out all TypeScript syntax, then behaves identically to the `js` loader. Bun does not perform typechecking. ### `tsx` **TypeScript + JSX loader**. Default for `.tsx`. Transpiles both TypeScript and JSX to vanilla JavaScript. ### `json` **JSON loader**. Default for `.json`. JSON files can be directly imported. ```ts import pkg from "./package.json"; pkg.name; // => "my-package" ``` During bundling, the parsed JSON is inlined into the bundle as a JavaScript object. ```ts var pkg = { name: "my-package", // ... other fields }; pkg.name; ``` If a `.json` file is passed as an entrypoint to the bundler, it will be converted to a `.js` module that `export default`s the parsed object. {% codetabs %} ```json#Input { "name": "John Doe", "age": 35, "email": "johndoe@example.com" } ``` ```js#Output export default { name: "John Doe", age: 35, email: "johndoe@example.com" } ``` {% /codetabs %} ### `toml` **TOML loader**. Default for `.toml`. TOML files can be directly imported. Bun will parse them with its fast native TOML parser. ```ts import config from "./bunfig.toml"; config.logLevel; // => "debug" ``` During bundling, the parsed TOML is inlined into the bundle as a JavaScript object. ```ts var config = { logLevel: "debug", // ...other fields }; config.logLevel; ``` If a `.toml` file is passed as an entrypoint, it will be converted to a `.js` module that `export default`s the parsed object. {% codetabs %} ```toml#Input name = "John Doe" age = 35 email = "johndoe@example.com" ``` ```js#Output export default { name: "John Doe", age: 35, email: "johndoe@example.com" } ``` {% /codetabs %} ### `text` **Text loader**. Default for `.txt`. The contents of the text file are read and inlined into the bundle as a string. Text files can be directly imported. The file is read and returned as a string. ```ts import contents from "./file.txt"; console.log(contents); // => "Hello, world!" ``` When referenced during a build, the contents are into the bundle as a string. ```ts var contents = `Hello, world!`; console.log(contents); ``` If a `.txt` file is passed as an entrypoint, it will be converted to a `.js` module that `export default`s the file contents. {% codetabs %} ```txt#Input Hello, world! ``` ```js#Output export default "Hello, world!"; ``` {% /codetabs %} ### `wasm` **WebAssembly loader**. Default for `.wasm`. In the runtime, WebAssembly files can be directly imported. The file is read and returned as a `WebAssembly.Module`. ```ts import wasm from "./module.wasm"; console.log(wasm); // => WebAssembly.Module ``` In the bundler, `.wasm` files are handled using the [`file`](#file) loader. ### `napi` **Native addon loader**. Default for `.node`. In the runtime, native addons can be directly imported. ```ts import addon from "./addon.node"; console.log(addon); ``` In the bundler, `.node` files are handled using the [`file`](#file) loader. ### `file` **File loader**. Default for all unrecognized file types. The file loader resolves the import as a _path/URL_ to the imported file. It's commonly used for referencing media or font assets. ```ts#logo.ts import logo from "./logo.svg"; console.log(logo); ``` _In the runtime_, Bun checks that the `logo.svg` file exists and converts it to an absolute path to the location of `logo.svg` on disk. ```bash $ bun run logo.ts /path/to/project/logo.svg ``` _In the bundler_, things are slightly different. The file is copied into `outdir` as-is, and the import is resolved as a relative path pointing to the copied file. ```ts#Output var logo = "./logo.svg"; console.log(logo); ``` If a value is specified for `publicPath`, the import will use value as a prefix to construct an absolute path/URL. {% table %} - Public path - Resolved import --- - `""` (default) - `/logo.svg` --- - `"/assets"` - `/assets/logo.svg` --- - `"https://cdn.example.com/"` - `https://cdn.example.com/logo.svg` {% /table %} {% callout %} The location and file name of the copied file is determined by the value of [`naming.asset`](/docs/bundler#naming). {% /callout %} This loader is copied into the `outdir` as-is. The name of the copied file is determined using the value of `naming.asset`. {% details summary="Fixing TypeScript import errors" %} If you're using TypeScript, you may get an error like this: ```ts // TypeScript error // Cannot find module './logo.svg' or its corresponding type declarations. ``` This can be fixed by creating `*.d.ts` file anywhere in your project (any name will work) with the following contents: ```ts declare module "*.svg" { const content: string; export default content; } ``` This tells TypeScript that any default imports from `.svg` should be treated as a string. {% /details %} Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/test/snapshots/export-default-module-hot.debug.js (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-04-06fix(node:events): fix abort behaviorGravatar Derrick Farris 3-170/+177
2023-04-06test(node:events): remove `console.log`Gravatar Derrick Farris 1-1/+0
2023-04-06feat(node:events): finish `EE.AsyncIterator` and `node:events.on()`, add some...Gravatar Derrick Farris 5-369/+276
2023-04-06wip(node:events): get async iter working, work through test flakinessGravatar Derrick Farris 5-236/+328
2023-04-06wip(node:events): fix `node:events.on` async iter to specGravatar Derrick Farris 16-136/+1116
2023-04-06docs: add a section on uninstalling bun (#2560)Gravatar dave caruso 1-0/+8
2023-04-06docs(cli/bunx): add notice (#2574)Gravatar Jozef Steinhübl 1-0/+4
2023-04-06Fix `toEqual` when the second array has extra array holes (#2580)Gravatar Dylan Conway 3-18/+76
2023-04-06Add last modify field "mtime" for FileBlob (#1431) (#2491)Gravatar Zhongwei Yao 6-33/+128
2023-04-06bun-types: infer strict `Subprocess` from `Bun.spawn()` options, part 2 (#2573)Gravatar dave caruso 9-67/+165
2023-04-06cache needs to update, move to another process (#2578)Gravatar Dylan Conway 2-156/+171
2023-04-06fix(ws): export Server (#2575)Gravatar hiroki osame 1-13/+30
2023-04-06docs(CONTRIBUTING): referece development guide (#2576)Gravatar hiroki osame 1-1/+5
2023-04-05rebase (#1501)Gravatar dave caruso 2-144/+305
2023-04-05Update `typecheck` (#2572)Gravatar Colin McDonnell 3-4/+8
2023-04-05prependGravatar Jarred Sumner 1-7/+3
2023-04-05Add tests for `bun test` with preload scripts (#2566)Gravatar Jake Boone 2-1/+107
2023-04-05Disable buffering when we clear terminalGravatar Jarred Sumner 1-0/+2
2023-04-05PrettierGravatar Jarred Sumner 3-4/+4
2023-04-05fix(fetch.proxy) fix proxy authentication (#2554)Gravatar Ciro Spaciari 3-31/+186
2023-04-05fix: build warnings (#2562)Gravatar hiroki osame 4-4/+1
2023-04-05In Documentation, move --watch before the script name (#2569)Gravatar Lawlzer 1-4/+5
2023-04-05fix `deepEquals` with array holes and accessors (#2557)Gravatar Dylan Conway 2-10/+249
2023-04-05fix: modules to have null prototype (#2561)Gravatar hiroki osame 2-2/+9
2023-04-04:clock1: :clock2: :clock3:Gravatar Jarred Sumner 1-1/+1
2023-04-04Implement `import.meta.main` (#2556)Gravatar Jarred Sumner 10-8/+89
2023-04-04Dylan/fix some failing tests (#2544)Gravatar Jarred Sumner 10-29/+72
2023-04-04Add npm benchmark (#2555)Gravatar Colin McDonnell 13-1/+271
2023-04-03Use absolute paths morebun-v0.5.9Gravatar Jarred Sumner 2-6/+11
2023-04-03Fix test failureGravatar Jarred Sumner 1-15/+18