bun-types 1.3.2-canary.20251105T140650 → 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/docs/README.md +28 -0
- package/package.json +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,42 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Add a dependency
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
To add an npm package as a dependency, use `bun add`.
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun add zod
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
This will add the package to `dependencies` in `package.json`. By default, the `^` range specifier will be used, to indicate that any future minor or patch versions are acceptable.
|
|
14
|
-
|
|
15
|
-
```json-diff
|
|
16
|
-
{
|
|
17
|
-
"dependencies": {
|
|
18
|
-
+ "zod": "^3.0.0"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
To "pin" to an exact version of the package, use `--exact`. This will add the package to `dependencies` without the `^`, pinning your project to the exact version you installed.
|
|
26
|
-
|
|
27
|
-
```sh
|
|
28
|
-
$ bun add zod --exact
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
To specify an exact version or a tag:
|
|
34
|
-
|
|
35
|
-
```sh
|
|
36
|
-
$ bun add zod@3.0.0
|
|
37
|
-
$ bun add zod@next
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Using bun install with an Azure Artifacts npm registry
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
{% callout %}
|
|
6
|
-
In [Azure Artifact's](https://learn.microsoft.com/en-us/azure/devops/artifacts/npm/npmrc?view=azure-devops&tabs=windows%2Cclassic) instructions for `.npmrc`, they say to base64 encode the password. Do not do this for `bun install`. Bun will automatically base64 encode the password for you if needed.
|
|
7
|
-
{% /callout %}
|
|
8
|
-
|
|
9
|
-
[Azure Artifacts](https://azure.microsoft.com/en-us/products/devops/artifacts) is a package management system for Azure DevOps. It allows you to host your own private npm registry, npm packages, and other types of packages as well.
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
### Configure with bunfig.toml
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
To use it with `bun install`, add a `bunfig.toml` file to your project with the following contents. Make sure to replace `my-azure-artifacts-user` with your Azure Artifacts username, such as `jarred1234`.
|
|
18
|
-
|
|
19
|
-
```toml#bunfig.toml
|
|
20
|
-
[install.registry]
|
|
21
|
-
url = "https://pkgs.dev.azure.com/my-azure-artifacts-user/_packaging/my-azure-artifacts-user/npm/registry"
|
|
22
|
-
username = "my-azure-artifacts-user"
|
|
23
|
-
# Bun v1.0.3+ supports using an environment variable here
|
|
24
|
-
password = "$NPM_PASSWORD"
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
Then assign your Azure Personal Access Token to the `NPM_PASSWORD` environment variable. Bun [automatically reads](https://bun.com/docs/runtime/env) `.env` files, so create a file called `.env` in your project root. There is no need to base-64 encode this token! Bun will do this for you.
|
|
30
|
-
|
|
31
|
-
```txt#.env
|
|
32
|
-
NPM_PASSWORD=<paste token here>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
### Configure with environment variables
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
To configure Azure Artifacts without `bunfig.toml`, you can set the `NPM_CONFIG_REGISTRY` environment variable. The URL should include `:username` and `:_password` as query parameters. Replace `<USERNAME>` and `<PASSWORD>` with the apprropriate values.
|
|
42
|
-
|
|
43
|
-
```bash#shell
|
|
44
|
-
NPM_CONFIG_REGISTRY=https://pkgs.dev.azure.com/my-azure-artifacts-user/_packaging/my-azure-artifacts-user/npm/registry/:username=<USERNAME>:_password=<PASSWORD>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
### Don't base64 encode the password
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
In [Azure Artifact's](https://learn.microsoft.com/en-us/azure/devops/artifacts/npm/npmrc?view=azure-devops&tabs=windows%2Cclassic) instructions for `.npmrc`, they say to base64 encode the password. Do not do this for `bun install`. Bun will automatically base64 encode the password for you if needed.
|
|
54
|
-
|
|
55
|
-
{% callout %}
|
|
56
|
-
**Tip** — If it ends with `==`, it probably is base64 encoded.
|
|
57
|
-
{% /callout %}
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
To decode a base64-encoded password, open your browser console and run:
|
|
62
|
-
|
|
63
|
-
```js
|
|
64
|
-
atob("<base64-encoded password>");
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
Alternatively, use the `base64` command line tool, but doing so means it may be saved in your terminal history which is not recommended:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
echo "base64-encoded-password" | base64 --decode
|
|
73
|
-
```
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Install dependencies with 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
|
-
```
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
To specify a version of Bun to install:
|
|
25
|
-
|
|
26
|
-
```yaml-diff#workflow.yml
|
|
27
|
-
name: my-workflow
|
|
28
|
-
jobs:
|
|
29
|
-
my-job:
|
|
30
|
-
name: my-job
|
|
31
|
-
runs-on: ubuntu-latest
|
|
32
|
-
steps:
|
|
33
|
-
# ...
|
|
34
|
-
- uses: oven-sh/setup-bun@v2
|
|
35
|
-
+ with:
|
|
36
|
-
+ version: "latest" # or "canary"
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
Refer to the [README.md](https://github.com/oven-sh/setup-bun) for complete documentation of the `setup-bun` GitHub Action.
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Override the default npm registry for bun install
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
The default registry is `registry.npmjs.org`. This can be globally configured in `bunfig.toml`.
|
|
6
|
-
|
|
7
|
-
```toml#bunfig.toml
|
|
8
|
-
[install]
|
|
9
|
-
# set default registry as a string
|
|
10
|
-
registry = "https://registry.npmjs.org"
|
|
11
|
-
|
|
12
|
-
# if needed, set a token
|
|
13
|
-
registry = { url = "https://registry.npmjs.org", token = "123456" }
|
|
14
|
-
|
|
15
|
-
# if needed, set a username/password
|
|
16
|
-
registry = "https://username:password@registry.npmjs.org"
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
Your `bunfig.toml` can reference environment variables. Bun automatically loads environment variables from `.env.local`, `.env.[NODE_ENV]`, and `.env`. See [Docs > Environment variables](https://bun.com/docs/runtime/env) for more information.
|
|
22
|
-
|
|
23
|
-
```toml#bunfig.toml
|
|
24
|
-
[install]
|
|
25
|
-
registry = { url = "https://registry.npmjs.org", token = "$npm_token" }
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Migrate from npm install to bun install
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
`bun install` is a Node.js compatible npm client designed to be an incredibly fast successor to npm.
|
|
6
|
-
|
|
7
|
-
We've put a lot of work into making sure that the migration path from `npm install` to `bun install` is as easy as running `bun install` instead of `npm install`.
|
|
8
|
-
|
|
9
|
-
- **Designed for Node.js & Bun**: `bun install` installs a Node.js compatible `node_modules` folder. You can use it in place of `npm install` for Node.js projects without any code changes and without using Bun's runtime.
|
|
10
|
-
- **Automatically converts `package-lock.json`** to bun's `bun.lock` lockfile format, preserving your existing resolved dependency versions without any manual work on your part. You can secretly use `bun install` in place of `npm install` at work without anyone noticing.
|
|
11
|
-
- **`.npmrc` compatible**: bun install reads npm registry configuration from npm's `.npmrc`, so you can use the same configuration for both npm and Bun.
|
|
12
|
-
- **Hardlinks**: On Windows and Linux, `bun install` uses hardlinks to conserve disk space and install times.
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
# It only takes one command to migrate
|
|
16
|
-
$ bun i
|
|
17
|
-
|
|
18
|
-
# To add dependencies:
|
|
19
|
-
$ bun i @types/bun
|
|
20
|
-
|
|
21
|
-
# To add devDependencies:
|
|
22
|
-
$ bun i -d @types/bun
|
|
23
|
-
|
|
24
|
-
# To remove a dependency:
|
|
25
|
-
$ bun rm @types/bun
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Run package.json scripts faster
|
|
31
|
-
|
|
32
|
-
Run scripts from package.json, executables from `node_modules/.bin` (sort of like `npx`), and JavaScript/TypeScript files (just like `node`) - all from a single simple command.
|
|
33
|
-
|
|
34
|
-
| NPM | Bun |
|
|
35
|
-
| ------------------ | ---------------- |
|
|
36
|
-
| `npm run <script>` | `bun <script>` |
|
|
37
|
-
| `npm exec <bin>` | `bun <bin>` |
|
|
38
|
-
| `node <file>` | `bun <file>` |
|
|
39
|
-
| `npx <package>` | `bunx <package>` |
|
|
40
|
-
|
|
41
|
-
When you use `bun run <executable>`, it will choose the locally-installed executable
|
|
42
|
-
|
|
43
|
-
```sh
|
|
44
|
-
# Run a package.json script:
|
|
45
|
-
$ bun my-script
|
|
46
|
-
$ bun run my-script
|
|
47
|
-
|
|
48
|
-
# Run an executable in node_modules/.bin:
|
|
49
|
-
$ bun my-executable # such as tsc, esbuild, etc.
|
|
50
|
-
$ bun run my-executable
|
|
51
|
-
|
|
52
|
-
# Run a JavaScript/TypeScript file:
|
|
53
|
-
$ bun ./index.ts
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Workspaces? Yes.
|
|
59
|
-
|
|
60
|
-
`bun install` supports workspaces similarly to npm, with more features.
|
|
61
|
-
|
|
62
|
-
In package.json, you can set `"workspaces"` to an array of relative paths.
|
|
63
|
-
|
|
64
|
-
```json#package.json
|
|
65
|
-
{
|
|
66
|
-
"name": "my-app",
|
|
67
|
-
"workspaces": ["packages/*", "apps/*"]
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
### Filter scripts by workspace name
|
|
74
|
-
|
|
75
|
-
In Bun, the `--filter` flag accepts a glob pattern, and will run the command concurrently for all workspace packages with a `name` that matches the pattern, respecting dependency order.
|
|
76
|
-
|
|
77
|
-
```sh
|
|
78
|
-
$ bun --filter 'lib-*' my-script
|
|
79
|
-
# instead of:
|
|
80
|
-
# npm run --workspace lib-foo --workspace lib-bar my-script
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## Update dependencies
|
|
86
|
-
|
|
87
|
-
To update a dependency, you can use `bun update <package>`. This will update the dependency to the latest version that satisfies the semver range specified in package.json.
|
|
88
|
-
|
|
89
|
-
```sh
|
|
90
|
-
# Update a single dependency
|
|
91
|
-
$ bun update @types/bun
|
|
92
|
-
|
|
93
|
-
# Update all dependencies
|
|
94
|
-
$ bun update
|
|
95
|
-
|
|
96
|
-
# Ignore semver, update to the latest version
|
|
97
|
-
$ bun update @types/bun --latest
|
|
98
|
-
|
|
99
|
-
# Update a dependency to a specific version
|
|
100
|
-
$ bun update @types/bun@1.3.2-canary.20251105T140650
|
|
101
|
-
|
|
102
|
-
# Update all dependencies to the latest versions
|
|
103
|
-
$ bun update --latest
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
### View outdated dependencies
|
|
109
|
-
|
|
110
|
-
To view outdated dependencies, run `bun outdated`. This is like `npm outdated` but with more compact output.
|
|
111
|
-
|
|
112
|
-
```sh
|
|
113
|
-
$ bun outdated
|
|
114
|
-
┌────────────────────────────────────────┬─────────┬────────┬────────┐
|
|
115
|
-
│ Package │ Current │ Update │ Latest │
|
|
116
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
117
|
-
│ @types/bun (dev) │ 1.1.6 │ 1.1.10 │ 1.1.10 │
|
|
118
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
119
|
-
│ @types/react (dev) │ 18.3.3 │ 18.3.8 │ 18.3.8 │
|
|
120
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
121
|
-
│ @typescript-eslint/eslint-plugin (dev) │ 7.16.1 │ 7.18.0 │ 8.6.0 │
|
|
122
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
123
|
-
│ @typescript-eslint/parser (dev) │ 7.16.1 │ 7.18.0 │ 8.6.0 │
|
|
124
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
125
|
-
│ @vscode/debugadapter (dev) │ 1.66.0 │ 1.67.0 │ 1.67.0 │
|
|
126
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
127
|
-
│ esbuild (dev) │ 0.21.5 │ 0.21.5 │ 0.24.0 │
|
|
128
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
129
|
-
│ eslint (dev) │ 9.7.0 │ 9.11.0 │ 9.11.0 │
|
|
130
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
131
|
-
│ mitata (dev) │ 0.1.11 │ 0.1.14 │ 1.0.2 │
|
|
132
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
133
|
-
│ prettier-plugin-organize-imports (dev) │ 4.0.0 │ 4.1.0 │ 4.1.0 │
|
|
134
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
135
|
-
│ source-map-js (dev) │ 1.2.0 │ 1.2.1 │ 1.2.1 │
|
|
136
|
-
├────────────────────────────────────────┼─────────┼────────┼────────┤
|
|
137
|
-
│ typescript (dev) │ 5.5.3 │ 5.6.2 │ 5.6.2 │
|
|
138
|
-
└────────────────────────────────────────┴─────────┴────────┴────────┘
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## List installed packages
|
|
144
|
-
|
|
145
|
-
To list installed packages, you can use `bun pm ls`. This will list all the packages that are installed in the `node_modules` folder using Bun's lockfile as the source of truth. You can pass the `-a` flag to list all installed packages, including transitive dependencies.
|
|
146
|
-
|
|
147
|
-
```sh
|
|
148
|
-
# List top-level installed packages:
|
|
149
|
-
$ bun pm ls
|
|
150
|
-
my-pkg node_modules (781)
|
|
151
|
-
├── @types/node@20.16.5
|
|
152
|
-
├── @types/react@18.3.8
|
|
153
|
-
├── @types/react-dom@18.3.0
|
|
154
|
-
├── eslint@8.57.1
|
|
155
|
-
├── eslint-config-next@14.2.8
|
|
156
|
-
|
|
157
|
-
# List all installed packages:
|
|
158
|
-
$ bun pm ls -a
|
|
159
|
-
my-pkg node_modules
|
|
160
|
-
├── @alloc/quick-lru@5.2.0
|
|
161
|
-
├── @isaacs/cliui@8.0.2
|
|
162
|
-
│ └── strip-ansi@7.1.0
|
|
163
|
-
│ └── ansi-regex@6.1.0
|
|
164
|
-
├── @jridgewell/gen-mapping@0.3.5
|
|
165
|
-
├── @jridgewell/resolve-uri@3.1.2
|
|
166
|
-
...
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## Create a package tarball
|
|
172
|
-
|
|
173
|
-
To create a package tarball, you can use `bun pm pack`. This will create a tarball of the package in the current directory.
|
|
174
|
-
|
|
175
|
-
```sh
|
|
176
|
-
# Create a tarball
|
|
177
|
-
$ bun pm pack
|
|
178
|
-
|
|
179
|
-
Total files: 46
|
|
180
|
-
Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
|
|
181
|
-
Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
|
|
182
|
-
Unpacked size: 0.41MB
|
|
183
|
-
Packed size: 117.50KB
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## Shebang
|
|
189
|
-
|
|
190
|
-
If the package references `node` in the `#!/usr/bin/env node` shebang, `bun run` will by default respect it and use the system's `node` executable. You can force it to use Bun's `node` by passing `--bun` to `bun run`.
|
|
191
|
-
|
|
192
|
-
When you pass `--bun` to `bun run`, we create a symlink to the locally-installed Bun executable named `"node"` in a temporary directory and add that to your `PATH` for the duration of the script's execution.
|
|
193
|
-
|
|
194
|
-
```sh
|
|
195
|
-
# Force using Bun's runtime instead of node
|
|
196
|
-
$ bun --bun my-script
|
|
197
|
-
|
|
198
|
-
# This also works:
|
|
199
|
-
$ bun run --bun my-script
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## Global installs
|
|
205
|
-
|
|
206
|
-
You can install packages globally using `bun i -g <package>`. This will install into a `.bun/install/global/node_modules` folder inside your home directory by default.
|
|
207
|
-
|
|
208
|
-
```sh
|
|
209
|
-
# Install a package globally
|
|
210
|
-
$ bun i -g eslint
|
|
211
|
-
|
|
212
|
-
# Run a globally-installed package without the `bun run` prefix
|
|
213
|
-
$ eslint --init
|
|
214
|
-
```
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Configure git to diff Bun's lockb lockfile
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
{% callout %}
|
|
6
|
-
Bun v1.1.39 introduced `bun.lock`, a JSONC formatted lockfile. `bun.lock` is human-readable and git-diffable without configuration, at no cost to performance. [**Learn more.**](https://bun.com/docs/install/lockfile#text-based-lockfile)
|
|
7
|
-
{% /callout %}
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
To teach `git` how to generate a human-readable diff of Bun's binary lockfile format (`.lockb`), add the following to your local or global `.gitattributes` file:
|
|
12
|
-
|
|
13
|
-
```js
|
|
14
|
-
*.lockb binary diff=lockb
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
Then add the following to you local git config with:
|
|
20
|
-
|
|
21
|
-
```sh
|
|
22
|
-
$ git config diff.lockb.textconv bun
|
|
23
|
-
$ git config diff.lockb.binary true
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
To globally configure git to diff Bun's lockfile, add the following to your global git config with:
|
|
29
|
-
|
|
30
|
-
```sh
|
|
31
|
-
$ git config --global diff.lockb.textconv bun
|
|
32
|
-
$ git config --global diff.lockb.binary true
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## How this works
|
|
38
|
-
|
|
39
|
-
Why this works:
|
|
40
|
-
|
|
41
|
-
- `textconv` tells git to run bun on the file before diffing
|
|
42
|
-
- `binary` tells git to treat the file as binary (so it doesn't try to diff it line-by-line)
|
|
43
|
-
|
|
44
|
-
In Bun, you can execute Bun's lockfile (`bun ./bun.lockb`) to generate a human-readable version of the lockfile and `git diff` can then use that to generate a human-readable diff.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Using bun install with Artifactory
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
[JFrog Artifactory](https://jfrog.com/artifactory/) is a package management system for npm, Docker, Maven, NuGet, Ruby, Helm, and more. It allows you to host your own private npm registry, npm packages, and other types of packages as well.
|
|
6
|
-
|
|
7
|
-
To use it with `bun install`, add a `bunfig.toml` file to your project with the following contents:
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
### Configure with bunfig.toml
|
|
12
|
-
|
|
13
|
-
Make sure to replace `MY_SUBDOMAIN` with your JFrog Artifactory subdomain, such as `jarred1234` and MY_TOKEN with your JFrog Artifactory token.
|
|
14
|
-
|
|
15
|
-
```toml#bunfig.toml
|
|
16
|
-
[install.registry]
|
|
17
|
-
url = "https://MY_SUBDOMAIN.jfrog.io/artifactory/api/npm/npm/_auth=MY_TOKEN"
|
|
18
|
-
# Bun v1.0.3+ supports using an environment variable here
|
|
19
|
-
# url = "$NPM_CONFIG_REGISTRY"
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
### Configure with `$NPM_CONFIG_REGISTRY`
|
|
25
|
-
|
|
26
|
-
Like with npm, you can use the `NPM_CONFIG_REGISTRY` environment variable to configure JFrog Artifactory with bun install.
|
|
27
|
-
|
|
28
|
-
---
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Install a package under a different name
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
To install an npm package under an alias:
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun add my-custom-name@npm:zod
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
The `zod` package can now be imported as `my-custom-name`.
|
|
14
|
-
|
|
15
|
-
```ts
|
|
16
|
-
import { z } from "my-custom-name";
|
|
17
|
-
|
|
18
|
-
z.string();
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Configure a private registry for an organization scope with bun install
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Private registries can be configured using either [`.npmrc`](https://bun.com/docs/install/npmrc) or [`bunfig.toml`](https://bun.com/docs/runtime/bunfig#install-registry). While both are supported, we recommend using **bunfig.toml** for enhanced flexibility and Bun-specific options.
|
|
6
|
-
|
|
7
|
-
To configure a registry for a particular npm scope:
|
|
8
|
-
|
|
9
|
-
```toml#bunfig.toml
|
|
10
|
-
[install.scopes]
|
|
11
|
-
# as a string
|
|
12
|
-
"@myorg1" = "https://username:password@registry.myorg.com/"
|
|
13
|
-
|
|
14
|
-
# as an object with username/password
|
|
15
|
-
# you can reference environment variables
|
|
16
|
-
"@myorg2" = {
|
|
17
|
-
username = "myusername",
|
|
18
|
-
password = "$npm_pass",
|
|
19
|
-
url = "https://registry.myorg.com/"
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
# as an object with token
|
|
23
|
-
"@myorg3" = { token = "$npm_token", url = "https://registry.myorg.com/" }
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
Your `bunfig.toml` can reference environment variables. Bun automatically loads environment variables from `.env.local`, `.env.[NODE_ENV]`, and `.env`. See [Docs > Environment variables](https://bun.com/docs/runtime/env) for more information.
|
|
30
|
-
|
|
31
|
-
```toml#bunfig.toml
|
|
32
|
-
[install.scopes]
|
|
33
|
-
"@myorg3" = { token = "$npm_token", url = "https://registry.myorg.com/" }
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Add a trusted dependency
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Unlike other npm clients, Bun does not execute arbitrary lifecycle scripts for installed dependencies, such as `postinstall` and `node-gyp` builds. These scripts represent a potential security risk, as they can execute arbitrary code on your machine.
|
|
6
|
-
|
|
7
|
-
{% callout %}
|
|
8
|
-
Bun includes a default allowlist of popular packages containing `postinstall` scripts that are known to be safe. You can see this list [here](https://github.com/oven-sh/bun/blob/main/src/install/default-trusted-dependencies.txt).
|
|
9
|
-
{% /callout %}
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
If you are seeing one of the following errors, you are probably trying to use a package that uses `postinstall` to work properly:
|
|
14
|
-
|
|
15
|
-
- `error: could not determine executable to run for package`
|
|
16
|
-
- `InvalidExe`
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
To allow Bun to execute lifecycle scripts for a specific package, add the package to `trustedDependencies` in your package.json file. You can do this automatically by running the command `bun pm trust <pkg>`.
|
|
21
|
-
|
|
22
|
-
{% callout %}
|
|
23
|
-
Note that this only allows lifecycle scripts for the specific package listed in `trustedDependencies`, _not_ the dependencies of that dependency!
|
|
24
|
-
{% /callout %}
|
|
25
|
-
|
|
26
|
-
```json-diff
|
|
27
|
-
{
|
|
28
|
-
"name": "my-app",
|
|
29
|
-
"version": "1.0.0",
|
|
30
|
-
+ "trustedDependencies": ["my-trusted-package"]
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
Once this is added, run a fresh install. Bun will re-install your dependencies and properly install
|
|
37
|
-
|
|
38
|
-
```sh
|
|
39
|
-
$ rm -rf node_modules
|
|
40
|
-
$ rm bun.lock
|
|
41
|
-
$ bun install
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
See [Docs > Package manager > Trusted dependencies](https://bun.com/docs/install/lifecycle) for complete documentation of trusted dependencies.
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Configuring a monorepo using workspaces
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Bun's package manager supports npm `"workspaces"`. This allows you to split a codebase into multiple distinct "packages" that live in the same repository, can depend on each other, and (when possible) share a `node_modules` directory.
|
|
6
|
-
|
|
7
|
-
Clone [this sample project](https://github.com/colinhacks/bun-workspaces) to experiment with workspaces.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
The root `package.json` should not contain any `"dependencies"`, `"devDependencies"`, etc. Each individual package should be self-contained and declare its own dependencies. Similarly, it's conventional to declare `"private": true` to avoid accidentally publishing the root package to `npm`.
|
|
12
|
-
|
|
13
|
-
```json#package.json
|
|
14
|
-
{
|
|
15
|
-
"name": "my-monorepo",
|
|
16
|
-
"private": true,
|
|
17
|
-
"workspaces": [
|
|
18
|
-
"packages/*"
|
|
19
|
-
]
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
It's common to place all packages in a `packages` directory. The `"workspaces"` field in package.json supports glob patterns, so you can use `packages/*` to indicate that each subdirectory of `packages` should be considered separate _package_ (also known as a workspace).
|
|
26
|
-
|
|
27
|
-
```txt
|
|
28
|
-
.
|
|
29
|
-
├── package.json
|
|
30
|
-
├── node_modules
|
|
31
|
-
└── packages
|
|
32
|
-
├── stuff-a
|
|
33
|
-
│ └── package.json
|
|
34
|
-
└── stuff-b
|
|
35
|
-
└── package.json
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
To add dependencies between workspaces, use the `"workspace:*"` syntax. Here we're adding `stuff-a` as a dependency of `stuff-b`.
|
|
41
|
-
|
|
42
|
-
```json-diff#packages/stuff-b/package.json
|
|
43
|
-
{
|
|
44
|
-
"name": "stuff-b",
|
|
45
|
-
"dependencies": {
|
|
46
|
-
+ "stuff-a": "workspace:*"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
Once added, run `bun install` from the project root to install dependencies for all workspaces.
|
|
54
|
-
|
|
55
|
-
```sh
|
|
56
|
-
$ bun install
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
To add npm dependencies to a particular workspace, just `cd` to the appropriate directory and run `bun add` commands as you would normally. Bun will detect that you are in a workspace and hoist the dependency as needed.
|
|
62
|
-
|
|
63
|
-
```sh
|
|
64
|
-
$ cd packages/stuff-a
|
|
65
|
-
$ bun add zod
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|