Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Bun support #167

Merged
merged 3 commits into from
Sep 11, 2023
Merged

Add Bun support #167

merged 3 commits into from
Sep 11, 2023

Conversation

terracatta
Copy link
Contributor

@terracatta terracatta commented Sep 11, 2023

What is Bun?

Bun is both a JS runtime and an extremely fast JS Bundler (even faster than esbuild) that recently hit 1.0.0 last week. This PR brings the bundler portion of Bun to the Rails community! 🎉

Example Runs

Installing

$ test_app [main] ./bin/rails javascript:install:bun
Compile into app/assets/builds
      create  app/assets/builds
      create  app/assets/builds/.keep
      append  app/assets/config/manifest.js
      append  .gitignore
      append  .gitignore
Add JavaScript include tag in application layout
      insert  app/views/layouts/application.html.erb
Create default entrypoint in app/javascript/application.js
      create  app/javascript
      create  app/javascript/application.js
Add default package.json
      create  package.json
Add bin/dev to start foreman
      create  bin/dev
Add default Procfile.dev
      create  Procfile.dev
Ensure foreman is installed
         run  gem install foreman from "."
Successfully installed foreman-0.87.2
Parsing documentation for foreman-0.87.2
Done installing documentation for foreman after 0 seconds
1 gem installed
Add default bun.config.js
      create  bun.config.js
Add build script to package.json

Running bin/dev and then editing app/javascript/application.js to demo --watch

$ test_app [main] ⚡  bin/dev
23:15:02 web.1  | started with pid 82050
23:15:02 js.1   | started with pid 82051
23:15:02 js.1   | $ bun bun.config.js --watch
23:15:02 web.1  | DEBUGGER: Debugger can attach via UNIX domain socket (/var/folders/rf/f7h7ybdj1mg7r7qn9h41hf6w0000gn/T/ruby-debug-sock-501/ruby-debug-jmeller-82050)
23:15:02 web.1  | => Booting Puma
23:15:02 web.1  | => Rails 7.0.8 application starting in development
23:15:02 web.1  | => Run `bin/rails server --help` for more startup options
23:15:02 web.1  | Puma starting in single mode...
23:15:02 web.1  | * Puma version: 5.6.7 (ruby 3.2.2-p53) ("Birdie's Version")
23:15:02 web.1  | *  Min threads: 5
23:15:02 web.1  | *  Max threads: 5
23:15:02 web.1  | *  Environment: development
23:15:02 web.1  | *          PID: 82050
23:15:02 web.1  | * Listening on http://127.0.0.1:3000
23:15:02 web.1  | * Listening on http://[::1]:3000
23:15:02 web.1  | Use Ctrl-C to stop
23:16:39 js.1   | File changed: application.js. Rebuilding...

Running bin/rails assets:precompile

$ test_app [main] ⚡  bin/rails assets:precompile
bun install v1.0.0 (822a00c4)
[4.00ms] done
No packages! Deleted empty lockfile
$ bun bun.config.js
I, [2023-09-10T23:24:13.851026 #82844]  INFO -- : Writing /Users/jmeller/code/terracatta/test_app/public/assets/application-6d532f823be8357a3451bb8bff7e218bd92382c27b49774e13ec9020f79373b0.js
I, [2023-09-10T23:24:13.851112 #82844]  INFO -- : Writing /Users/jmeller/code/terracatta/test_app/public/assets/application-6d532f823be8357a3451bb8bff7e218bd92382c27b49774e13ec9020f79373b0.js.gz
I, [2023-09-10T23:24:13.851211 #82844]  INFO -- : Writing /Users/jmeller/code/terracatta/test_app/public/assets/application.js-3679f7c6de8718fd7613ae1cef9dab742f2013d54a17f9d194505021a9ea91f0.map
I, [2023-09-10T23:24:13.851255 #82844]  INFO -- : Writing /Users/jmeller/code/terracatta/test_app/public/assets/application.js-3679f7c6de8718fd7613ae1cef9dab742f2013d54a17f9d194505021a9ea91f0.map.gz

Notes

  • Once this is merged, I will need to open a PR in the Rails repo so that rails new myapp -j bun works.

  • cssbundling-rails assumes you have yarn if we like the way I handled that in this rake task, I can make a similar PR there so that the gems work well together.

@dhh dhh merged commit e308e76 into rails:main Sep 11, 2023
@TheDevMinerTV
Copy link

Now you can write typescript again without it taking "forever" to compile.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants