bun-types 1.3.2-canary.20251104T140728 → 1.3.2-canary.20251106T140813
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bun.d.ts +4 -4
- package/docs/README.md +28 -0
- package/globals.d.ts +0 -1
- package/overrides.d.ts +45 -15
- package/package.json +1 -1
- package/test.d.ts +1 -1
- package/docs/api/binary-data.md +0 -1038
- package/docs/api/cc.md +0 -197
- package/docs/api/color.md +0 -262
- package/docs/api/console.md +0 -57
- package/docs/api/cookie.md +0 -449
- package/docs/api/dns.md +0 -110
- package/docs/api/fetch.md +0 -463
- package/docs/api/ffi.md +0 -557
- package/docs/api/file-io.md +0 -366
- package/docs/api/file-system-router.md +0 -112
- package/docs/api/file.md +0 -19
- package/docs/api/glob.md +0 -178
- package/docs/api/globals.md +0 -387
- package/docs/api/hashing.md +0 -319
- package/docs/api/html-rewriter.md +0 -334
- package/docs/api/http.md +0 -1408
- package/docs/api/import-meta.md +0 -69
- package/docs/api/node-api.md +0 -14
- package/docs/api/redis.md +0 -597
- package/docs/api/s3.md +0 -850
- package/docs/api/secrets.md +0 -319
- package/docs/api/semver.md +0 -52
- package/docs/api/spawn.md +0 -582
- package/docs/api/sql.md +0 -1374
- package/docs/api/sqlite.md +0 -694
- package/docs/api/streams.md +0 -230
- package/docs/api/tcp.md +0 -221
- package/docs/api/transpiler.md +0 -276
- package/docs/api/udp.md +0 -123
- package/docs/api/utils.md +0 -891
- package/docs/api/websockets.md +0 -573
- package/docs/api/workers.md +0 -322
- package/docs/api/yaml.md +0 -668
- package/docs/benchmarks.md +0 -120
- package/docs/bun-flavored-toml.md +0 -42
- package/docs/bundler/css.md +0 -1028
- package/docs/bundler/css_modules.md +0 -145
- package/docs/bundler/executables.md +0 -626
- package/docs/bundler/fullstack.md +0 -418
- package/docs/bundler/hmr.md +0 -234
- package/docs/bundler/html.md +0 -349
- package/docs/bundler/index.md +0 -1735
- package/docs/bundler/intro.md +0 -75
- package/docs/bundler/loaders.md +0 -410
- package/docs/bundler/macros.md +0 -329
- package/docs/bundler/plugins.md +0 -449
- package/docs/bundler/vs-esbuild.md +0 -1127
- package/docs/cli/add.md +0 -173
- package/docs/cli/bun-completions.md +0 -3
- package/docs/cli/bun-create.md +0 -338
- package/docs/cli/bun-install.md +0 -349
- package/docs/cli/bun-upgrade.md +0 -39
- package/docs/cli/bunx.md +0 -89
- package/docs/cli/filter.md +0 -90
- package/docs/cli/info.md +0 -65
- package/docs/cli/init.md +0 -85
- package/docs/cli/install.md +0 -344
- package/docs/cli/link.md +0 -40
- package/docs/cli/outdated.md +0 -90
- package/docs/cli/patch-commit.md +0 -11
- package/docs/cli/pm.md +0 -285
- package/docs/cli/publish.md +0 -120
- package/docs/cli/remove.md +0 -7
- package/docs/cli/run.md +0 -261
- package/docs/cli/test.md +0 -397
- package/docs/cli/unlink.md +0 -9
- package/docs/cli/update.md +0 -129
- package/docs/cli/why.md +0 -67
- package/docs/contributing/upgrading-webkit.md +0 -57
- package/docs/ecosystem/elysia.md +0 -24
- package/docs/ecosystem/express.md +0 -37
- package/docs/ecosystem/hono.md +0 -18
- package/docs/ecosystem/react.md +0 -65
- package/docs/ecosystem/stric.md +0 -38
- package/docs/guides/binary/arraybuffer-to-array.md +0 -27
- package/docs/guides/binary/arraybuffer-to-blob.md +0 -24
- package/docs/guides/binary/arraybuffer-to-buffer.md +0 -25
- package/docs/guides/binary/arraybuffer-to-string.md +0 -15
- package/docs/guides/binary/arraybuffer-to-typedarray.md +0 -39
- package/docs/guides/binary/blob-to-arraybuffer.md +0 -14
- package/docs/guides/binary/blob-to-dataview.md +0 -14
- package/docs/guides/binary/blob-to-stream.md +0 -14
- package/docs/guides/binary/blob-to-string.md +0 -15
- package/docs/guides/binary/blob-to-typedarray.md +0 -14
- package/docs/guides/binary/buffer-to-arraybuffer.md +0 -14
- package/docs/guides/binary/buffer-to-blob.md +0 -14
- package/docs/guides/binary/buffer-to-readablestream.md +0 -41
- package/docs/guides/binary/buffer-to-string.md +0 -25
- package/docs/guides/binary/buffer-to-typedarray.md +0 -14
- package/docs/guides/binary/dataview-to-string.md +0 -15
- package/docs/guides/binary/typedarray-to-arraybuffer.md +0 -25
- package/docs/guides/binary/typedarray-to-blob.md +0 -16
- package/docs/guides/binary/typedarray-to-buffer.md +0 -14
- package/docs/guides/binary/typedarray-to-dataview.md +0 -14
- package/docs/guides/binary/typedarray-to-readablestream.md +0 -41
- package/docs/guides/binary/typedarray-to-string.md +0 -16
- package/docs/guides/deployment/railway.md +0 -157
- package/docs/guides/ecosystem/astro.md +0 -72
- package/docs/guides/ecosystem/discordjs.md +0 -77
- package/docs/guides/ecosystem/docker.md +0 -140
- package/docs/guides/ecosystem/drizzle.md +0 -185
- package/docs/guides/ecosystem/edgedb.md +0 -228
- package/docs/guides/ecosystem/elysia.md +0 -31
- package/docs/guides/ecosystem/express.md +0 -40
- package/docs/guides/ecosystem/hono.md +0 -39
- package/docs/guides/ecosystem/mongoose.md +0 -87
- package/docs/guides/ecosystem/neon-drizzle.md +0 -220
- package/docs/guides/ecosystem/neon-serverless-postgres.md +0 -55
- package/docs/guides/ecosystem/nextjs.md +0 -49
- package/docs/guides/ecosystem/nuxt.md +0 -56
- package/docs/guides/ecosystem/pm2.md +0 -57
- package/docs/guides/ecosystem/prisma.md +0 -141
- package/docs/guides/ecosystem/qwik.md +0 -107
- package/docs/guides/ecosystem/react.md +0 -50
- package/docs/guides/ecosystem/remix.md +0 -78
- package/docs/guides/ecosystem/render.md +0 -79
- package/docs/guides/ecosystem/sentry.md +0 -52
- package/docs/guides/ecosystem/solidstart.md +0 -58
- package/docs/guides/ecosystem/ssr-react.md +0 -51
- package/docs/guides/ecosystem/stric.md +0 -55
- package/docs/guides/ecosystem/sveltekit.md +0 -125
- package/docs/guides/ecosystem/systemd.md +0 -113
- package/docs/guides/ecosystem/vite.md +0 -71
- package/docs/guides/html-rewriter/extract-links.md +0 -68
- package/docs/guides/html-rewriter/extract-social-meta.md +0 -93
- package/docs/guides/http/cluster.md +0 -66
- package/docs/guides/http/fetch-unix.md +0 -33
- package/docs/guides/http/fetch.md +0 -24
- package/docs/guides/http/file-uploads.md +0 -94
- package/docs/guides/http/hot.md +0 -26
- package/docs/guides/http/proxy.md +0 -24
- package/docs/guides/http/server.md +0 -46
- package/docs/guides/http/simple.md +0 -18
- package/docs/guides/http/stream-file.md +0 -48
- package/docs/guides/http/stream-iterator.md +0 -47
- package/docs/guides/http/stream-node-streams-in-bun.md +0 -20
- package/docs/guides/http/tls.md +0 -30
- package/docs/guides/install/add-dev.md +0 -26
- package/docs/guides/install/add-git.md +0 -36
- package/docs/guides/install/add-optional.md +0 -25
- package/docs/guides/install/add-peer.md +0 -43
- package/docs/guides/install/add-tarball.md +0 -33
- package/docs/guides/install/add.md +0 -42
- package/docs/guides/install/azure-artifacts.md +0 -73
- package/docs/guides/install/cicd.md +0 -41
- package/docs/guides/install/custom-registry.md +0 -30
- package/docs/guides/install/from-npm-install-to-bun-install.md +0 -214
- package/docs/guides/install/git-diff-bun-lockfile.md +0 -44
- package/docs/guides/install/jfrog-artifactory.md +0 -28
- package/docs/guides/install/npm-alias.md +0 -23
- package/docs/guides/install/registry-scope.md +0 -38
- package/docs/guides/install/trusted.md +0 -46
- package/docs/guides/install/workspaces.md +0 -70
- package/docs/guides/install/yarnlock.md +0 -44
- package/docs/guides/process/argv.md +0 -58
- package/docs/guides/process/ctrl-c.md +0 -16
- package/docs/guides/process/ipc.md +0 -66
- package/docs/guides/process/nanoseconds.md +0 -13
- package/docs/guides/process/os-signals.md +0 -39
- package/docs/guides/process/spawn-stderr.md +0 -31
- package/docs/guides/process/spawn-stdout.md +0 -26
- package/docs/guides/process/spawn.md +0 -41
- package/docs/guides/process/stdin.md +0 -54
- package/docs/guides/read-file/arraybuffer.md +0 -28
- package/docs/guides/read-file/buffer.md +0 -19
- package/docs/guides/read-file/exists.md +0 -16
- package/docs/guides/read-file/json.md +0 -17
- package/docs/guides/read-file/mime.md +0 -20
- package/docs/guides/read-file/stream.md +0 -26
- package/docs/guides/read-file/string.md +0 -22
- package/docs/guides/read-file/uint8array.md +0 -21
- package/docs/guides/read-file/watch.md +0 -68
- package/docs/guides/runtime/build-time-constants.md +0 -293
- package/docs/guides/runtime/cicd.md +0 -43
- package/docs/guides/runtime/codesign-macos-executable.md +0 -56
- package/docs/guides/runtime/define-constant.md +0 -145
- package/docs/guides/runtime/delete-directory.md +0 -37
- package/docs/guides/runtime/delete-file.md +0 -19
- package/docs/guides/runtime/heap-snapshot.md +0 -26
- package/docs/guides/runtime/import-html.md +0 -15
- package/docs/guides/runtime/import-json.md +0 -44
- package/docs/guides/runtime/import-toml.md +0 -30
- package/docs/guides/runtime/import-yaml.md +0 -102
- package/docs/guides/runtime/read-env.md +0 -32
- package/docs/guides/runtime/set-env.md +0 -47
- package/docs/guides/runtime/shell.md +0 -40
- package/docs/guides/runtime/timezone.md +0 -35
- package/docs/guides/runtime/tsconfig-paths.md +0 -29
- package/docs/guides/runtime/typescript.md +0 -49
- package/docs/guides/runtime/vscode-debugger.md +0 -47
- package/docs/guides/runtime/web-debugger.md +0 -82
- package/docs/guides/streams/node-readable-to-arraybuffer.md +0 -11
- package/docs/guides/streams/node-readable-to-blob.md +0 -11
- package/docs/guides/streams/node-readable-to-json.md +0 -12
- package/docs/guides/streams/node-readable-to-string.md +0 -12
- package/docs/guides/streams/node-readable-to-uint8array.md +0 -11
- package/docs/guides/streams/to-array.md +0 -14
- package/docs/guides/streams/to-arraybuffer.md +0 -14
- package/docs/guides/streams/to-blob.md +0 -14
- package/docs/guides/streams/to-buffer.md +0 -15
- package/docs/guides/streams/to-json.md +0 -14
- package/docs/guides/streams/to-string.md +0 -14
- package/docs/guides/streams/to-typedarray.md +0 -22
- package/docs/guides/test/bail.md +0 -22
- package/docs/guides/test/coverage-threshold.md +0 -60
- package/docs/guides/test/coverage.md +0 -44
- package/docs/guides/test/happy-dom.md +0 -68
- package/docs/guides/test/migrate-from-jest.md +0 -143
- package/docs/guides/test/mock-clock.md +0 -48
- package/docs/guides/test/mock-functions.md +0 -68
- package/docs/guides/test/rerun-each.md +0 -14
- package/docs/guides/test/run-tests.md +0 -111
- package/docs/guides/test/skip-tests.md +0 -39
- package/docs/guides/test/snapshot.md +0 -95
- package/docs/guides/test/spy-on.md +0 -46
- package/docs/guides/test/svelte-test.md +0 -120
- package/docs/guides/test/testing-library.md +0 -92
- package/docs/guides/test/timeout.md +0 -15
- package/docs/guides/test/todo-tests.md +0 -67
- package/docs/guides/test/update-snapshots.md +0 -46
- package/docs/guides/test/watch-mode.md +0 -19
- package/docs/guides/util/base64.md +0 -15
- package/docs/guides/util/deep-equals.md +0 -39
- package/docs/guides/util/deflate.md +0 -18
- package/docs/guides/util/detect-bun.md +0 -23
- package/docs/guides/util/entrypoint.md +0 -17
- package/docs/guides/util/escape-html.md +0 -22
- package/docs/guides/util/file-url-to-path.md +0 -14
- package/docs/guides/util/gzip.md +0 -18
- package/docs/guides/util/hash-a-password.md +0 -54
- package/docs/guides/util/import-meta-dir.md +0 -13
- package/docs/guides/util/import-meta-file.md +0 -13
- package/docs/guides/util/import-meta-path.md +0 -13
- package/docs/guides/util/javascript-uuid.md +0 -23
- package/docs/guides/util/main.md +0 -32
- package/docs/guides/util/path-to-file-url.md +0 -14
- package/docs/guides/util/sleep.md +0 -22
- package/docs/guides/util/version.md +0 -21
- package/docs/guides/util/which-path-to-executable-bin.md +0 -15
- package/docs/guides/websocket/compression.md +0 -31
- package/docs/guides/websocket/context.md +0 -77
- package/docs/guides/websocket/pubsub.md +0 -41
- package/docs/guides/websocket/simple.md +0 -33
- package/docs/guides/write-file/append.md +0 -52
- package/docs/guides/write-file/basic.md +0 -44
- package/docs/guides/write-file/blob.md +0 -28
- package/docs/guides/write-file/cat.md +0 -17
- package/docs/guides/write-file/file-cp.md +0 -16
- package/docs/guides/write-file/filesink.md +0 -52
- package/docs/guides/write-file/response.md +0 -17
- package/docs/guides/write-file/stdout.md +0 -21
- package/docs/guides/write-file/stream.md +0 -17
- package/docs/guides/write-file/unlink.md +0 -16
- package/docs/index.md +0 -77
- package/docs/install/audit.md +0 -57
- package/docs/install/cache.md +0 -59
- package/docs/install/catalogs.md +0 -298
- package/docs/install/index.md +0 -248
- package/docs/install/isolated.md +0 -197
- package/docs/install/lifecycle.md +0 -46
- package/docs/install/lockfile.md +0 -58
- package/docs/install/npmrc.md +0 -105
- package/docs/install/overrides.md +0 -73
- package/docs/install/patch.md +0 -59
- package/docs/install/registries.md +0 -30
- package/docs/install/security-scanner-api.md +0 -81
- package/docs/install/workspaces.md +0 -114
- package/docs/installation.md +0 -327
- package/docs/project/asan.md +0 -124
- package/docs/project/benchmarking.md +0 -203
- package/docs/project/bindgen.md +0 -225
- package/docs/project/building-windows.md +0 -162
- package/docs/project/contributing.md +0 -347
- package/docs/project/internals/build-process-for-ci.md +0 -75
- package/docs/project/licensing.md +0 -73
- package/docs/project/roadmap.md +0 -87
- package/docs/quickstart.md +0 -157
- package/docs/runtime/autoimport.md +0 -94
- package/docs/runtime/bun-apis.md +0 -207
- package/docs/runtime/bunfig.md +0 -772
- package/docs/runtime/debugger.md +0 -325
- package/docs/runtime/env.md +0 -253
- package/docs/runtime/hot.md +0 -145
- package/docs/runtime/index.md +0 -312
- package/docs/runtime/jsx.md +0 -385
- package/docs/runtime/loaders.md +0 -130
- package/docs/runtime/modules.md +0 -320
- package/docs/runtime/nodejs-apis.md +0 -463
- package/docs/runtime/plugins.md +0 -561
- package/docs/runtime/shell.md +0 -605
- package/docs/runtime/typescript.md +0 -139
- package/docs/runtime/web-apis.md +0 -128
- package/docs/test/configuration.md +0 -154
- package/docs/test/coverage.md +0 -142
- package/docs/test/discovery.md +0 -85
- package/docs/test/dom.md +0 -75
- package/docs/test/examples/concurrent-test-glob.md +0 -132
- package/docs/test/hot.md +0 -15
- package/docs/test/lifecycle.md +0 -81
- package/docs/test/mocks.md +0 -313
- package/docs/test/reporters.md +0 -117
- package/docs/test/runtime-behavior.md +0 -95
- package/docs/test/snapshots.md +0 -68
- package/docs/test/time.md +0 -126
- package/docs/test/writing.md +0 -825
- package/docs/typescript.md +0 -53
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Build-time constants with --define
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
The `--define` flag can be used with `bun build` and `bun build --compile` to inject build-time constants into your application. This is especially useful for embedding metadata like build versions, timestamps, or configuration flags directly into your compiled executables.
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun build --compile --define BUILD_VERSION='"1.2.3"' --define BUILD_TIME='"2024-01-15T10:30:00Z"' src/index.ts --outfile myapp
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## Why use build-time constants?
|
|
14
|
-
|
|
15
|
-
Build-time constants are embedded directly into your compiled code, making them:
|
|
16
|
-
|
|
17
|
-
- **Zero runtime overhead** - No environment variable lookups or file reads
|
|
18
|
-
- **Immutable** - Values are baked into the binary at compile time
|
|
19
|
-
- **Optimizable** - Dead code elimination can remove unused branches
|
|
20
|
-
- **Secure** - No external dependencies or configuration files to manage
|
|
21
|
-
|
|
22
|
-
This is similar to `gcc -D` or `#define` in C/C++, but for JavaScript/TypeScript.
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Basic usage
|
|
27
|
-
|
|
28
|
-
### With `bun build`
|
|
29
|
-
|
|
30
|
-
```sh
|
|
31
|
-
# Bundle with build-time constants
|
|
32
|
-
$ bun build --define BUILD_VERSION='"1.0.0"' --define NODE_ENV='"production"' src/index.ts --outdir ./dist
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### With `bun build --compile`
|
|
36
|
-
|
|
37
|
-
```sh
|
|
38
|
-
# Compile to executable with build-time constants
|
|
39
|
-
$ bun build --compile --define BUILD_VERSION='"1.0.0"' --define BUILD_TIME='"2024-01-15T10:30:00Z"' src/cli.ts --outfile mycli
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### JavaScript API
|
|
43
|
-
|
|
44
|
-
```ts
|
|
45
|
-
await Bun.build({
|
|
46
|
-
entrypoints: ["./src/index.ts"],
|
|
47
|
-
outdir: "./dist",
|
|
48
|
-
define: {
|
|
49
|
-
BUILD_VERSION: '"1.0.0"',
|
|
50
|
-
BUILD_TIME: '"2024-01-15T10:30:00Z"',
|
|
51
|
-
DEBUG: "false",
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Common use cases
|
|
59
|
-
|
|
60
|
-
### Version information
|
|
61
|
-
|
|
62
|
-
Embed version and build metadata directly into your executable:
|
|
63
|
-
|
|
64
|
-
{% codetabs %}
|
|
65
|
-
|
|
66
|
-
```ts#src/version.ts
|
|
67
|
-
// These constants are replaced at build time
|
|
68
|
-
declare const BUILD_VERSION: string;
|
|
69
|
-
declare const BUILD_TIME: string;
|
|
70
|
-
declare const GIT_COMMIT: string;
|
|
71
|
-
|
|
72
|
-
export function getVersion() {
|
|
73
|
-
return {
|
|
74
|
-
version: BUILD_VERSION,
|
|
75
|
-
buildTime: BUILD_TIME,
|
|
76
|
-
commit: GIT_COMMIT,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
```sh#Build command
|
|
82
|
-
$ bun build --compile \
|
|
83
|
-
--define BUILD_VERSION='"1.2.3"' \
|
|
84
|
-
--define BUILD_TIME='"2024-01-15T10:30:00Z"' \
|
|
85
|
-
--define GIT_COMMIT='"abc123"' \
|
|
86
|
-
src/cli.ts --outfile mycli
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
{% /codetabs %}
|
|
90
|
-
|
|
91
|
-
### Feature flags
|
|
92
|
-
|
|
93
|
-
Use build-time constants to enable/disable features:
|
|
94
|
-
|
|
95
|
-
```ts
|
|
96
|
-
// Replaced at build time
|
|
97
|
-
declare const ENABLE_ANALYTICS: boolean;
|
|
98
|
-
declare const ENABLE_DEBUG: boolean;
|
|
99
|
-
|
|
100
|
-
function trackEvent(event: string) {
|
|
101
|
-
if (ENABLE_ANALYTICS) {
|
|
102
|
-
// This entire block is removed if ENABLE_ANALYTICS is false
|
|
103
|
-
console.log("Tracking:", event);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (ENABLE_DEBUG) {
|
|
108
|
-
console.log("Debug mode enabled");
|
|
109
|
-
}
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
```sh
|
|
113
|
-
# Production build - analytics enabled, debug disabled
|
|
114
|
-
$ bun build --compile --define ENABLE_ANALYTICS=true --define ENABLE_DEBUG=false src/app.ts --outfile app-prod
|
|
115
|
-
|
|
116
|
-
# Development build - both enabled
|
|
117
|
-
$ bun build --compile --define ENABLE_ANALYTICS=false --define ENABLE_DEBUG=true src/app.ts --outfile app-dev
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### Configuration
|
|
121
|
-
|
|
122
|
-
Replace configuration objects at build time:
|
|
123
|
-
|
|
124
|
-
```ts
|
|
125
|
-
declare const CONFIG: {
|
|
126
|
-
apiUrl: string;
|
|
127
|
-
timeout: number;
|
|
128
|
-
retries: number;
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
// CONFIG is replaced with the actual object at build time
|
|
132
|
-
const response = await fetch(CONFIG.apiUrl, {
|
|
133
|
-
timeout: CONFIG.timeout,
|
|
134
|
-
});
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
```sh
|
|
138
|
-
$ bun build --compile --define 'CONFIG={"apiUrl":"https://api.example.com","timeout":5000,"retries":3}' src/app.ts --outfile app
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## Advanced patterns
|
|
144
|
-
|
|
145
|
-
### Environment-specific builds
|
|
146
|
-
|
|
147
|
-
Create different executables for different environments:
|
|
148
|
-
|
|
149
|
-
```json
|
|
150
|
-
{
|
|
151
|
-
"scripts": {
|
|
152
|
-
"build:dev": "bun build --compile --define NODE_ENV='\"development\"' --define API_URL='\"http://localhost:3000\"' src/app.ts --outfile app-dev",
|
|
153
|
-
"build:staging": "bun build --compile --define NODE_ENV='\"staging\"' --define API_URL='\"https://staging.example.com\"' src/app.ts --outfile app-staging",
|
|
154
|
-
"build:prod": "bun build --compile --define NODE_ENV='\"production\"' --define API_URL='\"https://api.example.com\"' src/app.ts --outfile app-prod"
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### Using shell commands for dynamic values
|
|
160
|
-
|
|
161
|
-
Generate build-time constants from shell commands:
|
|
162
|
-
|
|
163
|
-
```sh
|
|
164
|
-
# Use git to get current commit and timestamp
|
|
165
|
-
$ bun build --compile \
|
|
166
|
-
--define BUILD_VERSION="\"$(git describe --tags --always)\"" \
|
|
167
|
-
--define BUILD_TIME="\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"" \
|
|
168
|
-
--define GIT_COMMIT="\"$(git rev-parse HEAD)\"" \
|
|
169
|
-
src/cli.ts --outfile mycli
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Build automation script
|
|
173
|
-
|
|
174
|
-
Create a build script that automatically injects build metadata:
|
|
175
|
-
|
|
176
|
-
```ts
|
|
177
|
-
// build.ts
|
|
178
|
-
import { $ } from "bun";
|
|
179
|
-
|
|
180
|
-
const version = await $`git describe --tags --always`.text();
|
|
181
|
-
const buildTime = new Date().toISOString();
|
|
182
|
-
const gitCommit = await $`git rev-parse HEAD`.text();
|
|
183
|
-
|
|
184
|
-
await Bun.build({
|
|
185
|
-
entrypoints: ["./src/cli.ts"],
|
|
186
|
-
outdir: "./dist",
|
|
187
|
-
define: {
|
|
188
|
-
BUILD_VERSION: JSON.stringify(version.trim()),
|
|
189
|
-
BUILD_TIME: JSON.stringify(buildTime),
|
|
190
|
-
GIT_COMMIT: JSON.stringify(gitCommit.trim()),
|
|
191
|
-
},
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
console.log(`Built with version ${version.trim()}`);
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## Important considerations
|
|
200
|
-
|
|
201
|
-
### Value format
|
|
202
|
-
|
|
203
|
-
Values must be valid JSON that will be parsed and inlined as JavaScript expressions:
|
|
204
|
-
|
|
205
|
-
```sh
|
|
206
|
-
# ✅ Strings must be JSON-quoted
|
|
207
|
-
--define VERSION='"1.0.0"'
|
|
208
|
-
|
|
209
|
-
# ✅ Numbers are JSON literals
|
|
210
|
-
--define PORT=3000
|
|
211
|
-
|
|
212
|
-
# ✅ Booleans are JSON literals
|
|
213
|
-
--define DEBUG=true
|
|
214
|
-
|
|
215
|
-
# ✅ Objects and arrays (use single quotes to wrap the JSON)
|
|
216
|
-
--define 'CONFIG={"host":"localhost","port":3000}'
|
|
217
|
-
|
|
218
|
-
# ✅ Arrays work too
|
|
219
|
-
--define 'FEATURES=["auth","billing","analytics"]'
|
|
220
|
-
|
|
221
|
-
# ❌ This won't work - missing quotes around string
|
|
222
|
-
--define VERSION=1.0.0
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
### Property keys
|
|
226
|
-
|
|
227
|
-
You can use property access patterns as keys, not just simple identifiers:
|
|
228
|
-
|
|
229
|
-
```sh
|
|
230
|
-
# ✅ Replace process.env.NODE_ENV with "production"
|
|
231
|
-
--define 'process.env.NODE_ENV="production"'
|
|
232
|
-
|
|
233
|
-
# ✅ Replace process.env.API_KEY with the actual key
|
|
234
|
-
--define 'process.env.API_KEY="abc123"'
|
|
235
|
-
|
|
236
|
-
# ✅ Replace nested properties
|
|
237
|
-
--define 'window.myApp.version="1.0.0"'
|
|
238
|
-
|
|
239
|
-
# ✅ Replace array access
|
|
240
|
-
--define 'process.argv[2]="--production"'
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
This is particularly useful for environment variables:
|
|
244
|
-
|
|
245
|
-
```ts
|
|
246
|
-
// Before compilation
|
|
247
|
-
if (process.env.NODE_ENV === "production") {
|
|
248
|
-
console.log("Production mode");
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// After compilation with --define 'process.env.NODE_ENV="production"'
|
|
252
|
-
if ("production" === "production") {
|
|
253
|
-
console.log("Production mode");
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// After optimization
|
|
257
|
-
console.log("Production mode");
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### TypeScript declarations
|
|
261
|
-
|
|
262
|
-
For TypeScript projects, declare your constants to avoid type errors:
|
|
263
|
-
|
|
264
|
-
```ts
|
|
265
|
-
// types/build-constants.d.ts
|
|
266
|
-
declare const BUILD_VERSION: string;
|
|
267
|
-
declare const BUILD_TIME: string;
|
|
268
|
-
declare const NODE_ENV: "development" | "staging" | "production";
|
|
269
|
-
declare const DEBUG: boolean;
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
### Cross-platform compatibility
|
|
273
|
-
|
|
274
|
-
When building for multiple platforms, constants work the same way:
|
|
275
|
-
|
|
276
|
-
```sh
|
|
277
|
-
# Linux
|
|
278
|
-
$ bun build --compile --target=bun-linux-x64 --define PLATFORM='"linux"' src/app.ts --outfile app-linux
|
|
279
|
-
|
|
280
|
-
# macOS
|
|
281
|
-
$ bun build --compile --target=bun-darwin-x64 --define PLATFORM='"darwin"' src/app.ts --outfile app-macos
|
|
282
|
-
|
|
283
|
-
# Windows
|
|
284
|
-
$ bun build --compile --target=bun-windows-x64 --define PLATFORM='"windows"' src/app.ts --outfile app-windows.exe
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## Related
|
|
290
|
-
|
|
291
|
-
- [Define constants at runtime](/guides/runtime/define-constant) - Using `--define` with `bun run`
|
|
292
|
-
- [Building executables](/bundler/executables) - Complete guide to `bun build --compile`
|
|
293
|
-
- [Bundler API](/bundler) - Full bundler documentation including `define` option
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Install and run Bun in GitHub Actions
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Use the official [`setup-bun`](https://github.com/oven-sh/setup-bun) GitHub Action to install `bun` in your GitHub Actions runner.
|
|
6
|
-
|
|
7
|
-
```yaml-diff#workflow.yml
|
|
8
|
-
name: my-workflow
|
|
9
|
-
jobs:
|
|
10
|
-
my-job:
|
|
11
|
-
name: my-job
|
|
12
|
-
runs-on: ubuntu-latest
|
|
13
|
-
steps:
|
|
14
|
-
# ...
|
|
15
|
-
- uses: actions/checkout@v4
|
|
16
|
-
+ - uses: oven-sh/setup-bun@v2
|
|
17
|
-
|
|
18
|
-
# run any `bun` or `bunx` command
|
|
19
|
-
+ - run: bun install
|
|
20
|
-
+ - run: bun index.ts
|
|
21
|
-
+ - run: bun run build
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
To specify a version of Bun to install:
|
|
27
|
-
|
|
28
|
-
```yaml-diff#workflow.yml
|
|
29
|
-
name: my-workflow
|
|
30
|
-
jobs:
|
|
31
|
-
my-job:
|
|
32
|
-
name: my-job
|
|
33
|
-
runs-on: ubuntu-latest
|
|
34
|
-
steps:
|
|
35
|
-
# ...
|
|
36
|
-
- uses: oven-sh/setup-bun@v2
|
|
37
|
-
+ with:
|
|
38
|
-
+ bun-version: 1.2.0 # or "latest", "canary", <sha>
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
Refer to the [README.md](https://github.com/oven-sh/setup-bun) for complete documentation of the `setup-bun` GitHub Action.
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Codesign a single-file JavaScript executable on macOS
|
|
3
|
-
description: Fix the "can't be opened because it is from an unidentified developer" Gatekeeper warning when running your JavaScript executable.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Compile your executable using the `--compile` flag.
|
|
7
|
-
|
|
8
|
-
```sh
|
|
9
|
-
$ bun build --compile ./path/to/entry.ts --outfile myapp
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
List your available signing identities. One of these will be your signing identity that you pass to the `codesign` command. This command requires macOS.
|
|
15
|
-
|
|
16
|
-
```sh
|
|
17
|
-
$ security find-identity -v -p codesigning
|
|
18
|
-
1. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "Developer ID Application: Your Name (ZZZZZZZZZZ)"
|
|
19
|
-
1 valid identities found
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
Optional, but recommended: create an `entitlements.plist` file with the necessary permissions for the JavaScript engine to work correctly.
|
|
25
|
-
|
|
26
|
-
```xml#entitlements.plist
|
|
27
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
28
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
29
|
-
<plist version="1.0">
|
|
30
|
-
<dict>
|
|
31
|
-
<key>com.apple.security.cs.allow-jit</key>
|
|
32
|
-
<true/>
|
|
33
|
-
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
|
34
|
-
<true/>
|
|
35
|
-
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
|
36
|
-
<true/>
|
|
37
|
-
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
|
38
|
-
<true/>
|
|
39
|
-
<key>com.apple.security.cs.disable-library-validation</key>
|
|
40
|
-
<true/>
|
|
41
|
-
</dict>
|
|
42
|
-
</plist>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
Sign your executable using the `codesign` command and verify it works.
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
$ codesign --entitlements entitlements.plist -vvvv --deep --sign "XXXXXXXXXX" ./myapp --force
|
|
51
|
-
$ codesign -vvv --verify ./myapp
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
For more information on macOS codesigning, refer to [Apple's Code Signing documentation](https://developer.apple.com/documentation/security/code_signing_services). For details about creating single-file executables with Bun, see [Standalone Executables](/docs/bundler/executables). This guide requires Bun v1.2.4 or newer.
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Define and replace static globals & constants
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
The `--define` flag lets you declare statically-analyzable constants and globals. It replace all usages of an identifier or property in a JavaScript or TypeScript file with a constant value. This feature is supported at runtime and also in `bun build`. This is sort of similar to `#define` in C/C++, except for JavaScript.
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun --define process.env.NODE_ENV="'production'" src/index.ts # Runtime
|
|
9
|
-
$ bun build --define process.env.NODE_ENV="'production'" src/index.ts # Build
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
These statically-known values are used by Bun for dead code elimination and other optimizations.
|
|
15
|
-
|
|
16
|
-
```ts
|
|
17
|
-
if (process.env.NODE_ENV === "production") {
|
|
18
|
-
console.log("Production mode");
|
|
19
|
-
} else {
|
|
20
|
-
console.log("Development mode");
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
Before the code reaches the JavaScript engine, Bun replaces `process.env.NODE_ENV` with `"production"`.
|
|
27
|
-
|
|
28
|
-
```ts-diff
|
|
29
|
-
+ if ("production" === "production") {
|
|
30
|
-
console.log("Production mode");
|
|
31
|
-
} else {
|
|
32
|
-
console.log("Development mode");
|
|
33
|
-
}
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
It doesn't stop there. Bun's optimizing transpiler is smart enough to do some basic constant folding.
|
|
39
|
-
|
|
40
|
-
Since `"production" === "production"` is always `true`, Bun replaces the entire expression with the `true` value.
|
|
41
|
-
|
|
42
|
-
```ts-diff
|
|
43
|
-
+ if (true) {
|
|
44
|
-
console.log("Production mode");
|
|
45
|
-
} else {
|
|
46
|
-
console.log("Development mode");
|
|
47
|
-
}
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
And finally, Bun detects the `else` branch is not reachable, and eliminates it.
|
|
53
|
-
|
|
54
|
-
```ts
|
|
55
|
-
console.log("Production mode");
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## What types of values are supported?
|
|
61
|
-
|
|
62
|
-
Values can be strings, identifiers, properties, or JSON.
|
|
63
|
-
|
|
64
|
-
### Replace global identifiers
|
|
65
|
-
|
|
66
|
-
To make all usages of `window` be `undefined`, you can use the following command.
|
|
67
|
-
|
|
68
|
-
```sh
|
|
69
|
-
bun --define window="undefined" src/index.ts
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
This can be useful when Server-Side Rendering (SSR) or when you want to make sure that the code doesn't depend on the `window` object.
|
|
73
|
-
|
|
74
|
-
```js
|
|
75
|
-
if (typeof window !== "undefined") {
|
|
76
|
-
console.log("Client-side code");
|
|
77
|
-
} else {
|
|
78
|
-
console.log("Server-side code");
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
You can also set the value to be another identifier. For example, to make all usages of `global` be `globalThis`, you can use the following command.
|
|
83
|
-
|
|
84
|
-
```sh
|
|
85
|
-
bun --define global="globalThis" src/index.ts
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
`global` is a global object in Node.js, but not in web browsers. So, you can use this to fix some cases where the code assumes that `global` is available.
|
|
89
|
-
|
|
90
|
-
### Replace values with JSON
|
|
91
|
-
|
|
92
|
-
`--define` can also be used to replace values with JSON objects and arrays.
|
|
93
|
-
|
|
94
|
-
To replace all usages of `AWS` with the JSON object `{"ACCESS_KEY":"abc","SECRET_KEY":"def"}`, you can use the following command.
|
|
95
|
-
|
|
96
|
-
```sh
|
|
97
|
-
# JSON
|
|
98
|
-
bun --define AWS='{"ACCESS_KEY":"abc","SECRET_KEY":"def"}' src/index.ts
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
Those will be transformed into the equivalent JavaScript code.
|
|
102
|
-
|
|
103
|
-
From:
|
|
104
|
-
|
|
105
|
-
```ts
|
|
106
|
-
console.log(AWS.ACCESS_KEY); // => "abc"
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
To:
|
|
110
|
-
|
|
111
|
-
```ts
|
|
112
|
-
console.log("abc");
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Replace values with other properties
|
|
116
|
-
|
|
117
|
-
You can also pass properties to the `--define` flag.
|
|
118
|
-
|
|
119
|
-
For example, to replace all usages of `console.write` with `console.log`, you can use the following command (requires Bun v1.1.5 or later)
|
|
120
|
-
|
|
121
|
-
```sh
|
|
122
|
-
bun --define console.write=console.log src/index.ts
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
That transforms the following input:
|
|
126
|
-
|
|
127
|
-
```ts
|
|
128
|
-
console.write("Hello, world!");
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Into the following output:
|
|
132
|
-
|
|
133
|
-
```ts
|
|
134
|
-
console.log("Hello, world!");
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## How is this different than setting a variable?
|
|
138
|
-
|
|
139
|
-
You can also set `process.env.NODE_ENV` to `"production"` in your code, but that won't help with dead code elimination. In JavaScript, property accesses can have side effects. Getters & setters can be functions, and even dynamically defined (due to prototype chains and Proxy). Even if you set `process.env.NODE_ENV` to `"production"`, on the next line, it is not safe for static analysis tools to assume that `process.env.NODE_ENV`is`"production"`.
|
|
140
|
-
|
|
141
|
-
## How is this different than find-and-replace or string replacement?
|
|
142
|
-
|
|
143
|
-
The `--define` flag operates on the AST (Abstract Syntax Tree) level, not on the text level. It happens during the transpilation process, which means it can be used in optimizations like dead code elimination.
|
|
144
|
-
|
|
145
|
-
String replacement tools tend to have escaping issues and replace unintended parts of the code.
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Delete directories
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
To recursively delete a directory and all its contents, use `rm` from `node:fs/promises`. This is like running `rm -rf` in JavaScript.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
import { rm } from "node:fs/promises";
|
|
9
|
-
|
|
10
|
-
// Delete a directory and all its contents
|
|
11
|
-
await rm("path/to/directory", { recursive: true, force: true });
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
These options configure the deletion behavior:
|
|
17
|
-
|
|
18
|
-
- `recursive: true` - Delete subdirectories and their contents
|
|
19
|
-
- `force: true` - Don't throw errors if the directory doesn't exist
|
|
20
|
-
|
|
21
|
-
You can also use it without `force` to ensure the directory exists:
|
|
22
|
-
|
|
23
|
-
```ts
|
|
24
|
-
try {
|
|
25
|
-
await rm("path/to/directory", { recursive: true });
|
|
26
|
-
} catch (error) {
|
|
27
|
-
if (error.code === "ENOENT") {
|
|
28
|
-
console.log("Directory doesn't exist");
|
|
29
|
-
} else {
|
|
30
|
-
throw error;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
See [Docs > API > FileSystem](https://bun.com/docs/api/file-io) for more filesystem operations.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Delete files
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
To delete a file, use `Bun.file(path).delete()`.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
// Delete a file
|
|
9
|
-
const file = Bun.file("path/to/file.txt");
|
|
10
|
-
await file.delete();
|
|
11
|
-
|
|
12
|
-
// Now the file doesn't exist
|
|
13
|
-
const exists = await file.exists();
|
|
14
|
-
// => false
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
See [Docs > API > FileSystem](https://bun.com/docs/api/file-io) for more filesystem operations.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Inspect memory usage using V8 heap snapshots
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Bun implements V8's heap snapshot API, which allows you to create snapshots of the heap at runtime. This helps debug memory leaks in your JavaScript/TypeScript application.
|
|
6
|
-
|
|
7
|
-
```ts#snapshot.ts
|
|
8
|
-
import v8 from "node:v8";
|
|
9
|
-
|
|
10
|
-
// Creates a heap snapshot file with an auto-generated name
|
|
11
|
-
const snapshotPath = v8.writeHeapSnapshot();
|
|
12
|
-
console.log(`Heap snapshot written to: ${snapshotPath}`);
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Inspect memory in Chrome DevTools
|
|
18
|
-
|
|
19
|
-
To view V8 heap snapshots in Chrome DevTools:
|
|
20
|
-
|
|
21
|
-
1. Open Chrome DevTools (F12 or right-click and select "Inspect")
|
|
22
|
-
2. Go to the "Memory" tab
|
|
23
|
-
3. Click the "Load" button (folder icon)
|
|
24
|
-
4. Select your `.heapsnapshot` file
|
|
25
|
-
|
|
26
|
-
{% image src="/images/chrome-devtools-memory.png" alt="Chrome DevTools Memory Tab" width="100%" /%}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Import a HTML file as text
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
To import a `.html` file in Bun as a text file, use the `type: "text"` attribute in the import statement.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
import html from "./file.html" with { type: "text" };
|
|
9
|
-
|
|
10
|
-
console.log(html); // <!DOCTYPE html><html><head>...
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
This can also be used with hot module reloading and/or watch mode to force Bun to reload whenever the `./file.html` file changes.
|
|
14
|
-
|
|
15
|
-
This feature was added in Bun v1.1.5.
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Import a JSON file
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Bun natively supports `.json` imports.
|
|
6
|
-
|
|
7
|
-
```json#package.json
|
|
8
|
-
{
|
|
9
|
-
"name": "bun",
|
|
10
|
-
"version": "1.0.0",
|
|
11
|
-
"author": {
|
|
12
|
-
"name": "John Dough",
|
|
13
|
-
"email": "john@dough.com"
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
Import the file like any other source file.
|
|
21
|
-
|
|
22
|
-
```ts
|
|
23
|
-
import data from "./package.json";
|
|
24
|
-
|
|
25
|
-
data.name; // => "bun"
|
|
26
|
-
data.version; // => "1.0.0"
|
|
27
|
-
data.author.name; // => "John Dough"
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
Bun also supports [Import Attributes](https://github.com/tc39/proposal-import-attributes/) and [JSON modules](https://github.com/tc39/proposal-json-modules) syntax.
|
|
33
|
-
|
|
34
|
-
```ts
|
|
35
|
-
import data from "./package.json" with { type: "json" };
|
|
36
|
-
|
|
37
|
-
data.name; // => "bun"
|
|
38
|
-
data.version; // => "1.0.0"
|
|
39
|
-
data.author.name; // => "John Dough"
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
See [Docs > Runtime > TypeScript](https://bun.com/docs/runtime/typescript) for more information on using TypeScript with Bun.
|