Blazing fast NodeJS dependencies with Laravel and Bun
You can think of it as a replacement for NPM/Yarn - but it's blazing fast.
Let's see how we can use Bun as a replacement for NPM and Yarn locally and how we can make use of this in a typical Laravel application.
The installation of Bun is pretty straightforward.
If you're on Mac, Linux or WSL, you can simply run this Bash command:
curl -fsSL https://bun.sh/install | bash
If you prefer to install your dependencies via Homebrew, rather than running random Bash scripts, you can do this as well:
brew tap oven-sh/bun brew install bun
Windows users currently can make use of an experimental native build of Bun that offers a limited feature set. This means that features like adding, removing and installing packages does not yet work on Windows.
Once Bun is installed, you can verify the installation by running
bun --version in your Terminal.
Now we can use Bun as a replacement for NPM or Yarn.
I have created a new Laravel Jetstream application with Inertia and Vue as an example.
In order to install all dependencies from an existing package.json file, all you need to do is run
Running this on a fresh Laravel project with no cache only takes 1.68s on my Macbook.
Let's try this again with the files cached:
rm -rf node_modules bun install
With all dependencies cached, this takes 57.00ms - that's pretty insane!
Installing dependencies with Bun
You can use Bun to install (dev) dependencies just like you have previously used yarn or npm.
To install a new dependency, run:
bun add [PACKAGE_NAME]
If you want to install the dependency as a dev-dependency instead:
bun add -d [PACKAGE_NAME]
Just like the
install command, adding new dependencies is very fast as well.
Just like adding dependencies, we can also uninstall existing dependencies via Bun. This can be done with the
bun rm [PACKAGE_NAME]
In order to run Vite in your Laravel projects, you most likely used
npm run dev or
yarn run dev.
Bun provides the same options to run existing
In order to run your Laravel Vite dev server, you can run:
bun run dev bun run build
Or make it even shorter and drop the
run. If the script name is not a reserved Bun action name (like
add, etc.), it will automatically run the script with the given name:
Linking local dependencies
If you ever developed a PHP package locally, you probably used Composer's
path repository type in order to symlink your local PHP package into your Laravel app.
This allows you to add the package as a dependency, but still easily continue working on it, as it's just symlinked into your vendor folder.
NPM and Yarn provide a similar feature when working with a local package – and so does Bun.
In order to use this, you first need to go into the directory of your local package. There you may call the
bun link command.
This instructs Bun that the package in this directory can be linked as a dependency.
cd /path/to/my-package bun link
Once your package is marked as "linkable", you can link it in your actual application as a dependency.
You can call
bun link and provide the package name from the
package.json as an additional parameter.
cd /path/to/my-app bun link my-package
This will now create a symlink in the
node_modules directory of your application, pointing to the local directory of your package.
If your package is not yet added to your
package.json file, you can also add the
--save flag, to immediately add your linked package as a depenceny:
cd /path/to/my-app bun link my-package --save
And that's about it! Now you can use Bun as a replacement for NPM/Yarn and enjoy up to 33x speed improvements.