Usage with vite¶
While you can use any js bundler you want with Superglue. Vite has conveniences that make working with Superglue easier.
To get started, go ahead and follow the instructions to install vite_rails
Next move your app/javascript/entrypoints/application.jsx
file to
app/javascript/entrypoints/application.jsx
and update the references.
Info
When using Superglue's installation generator, a app/javascript/application.jsx
gets
generated. vite_rails
expects this to be put in an entrypoints
folder. If you're installing
vite_rails
after superglue's installation, the is set by vite_rails
to be app/javascript/entrypoints
.
Migrate your @views
, @javascript
aliases to vite.config.mts
import { defineConfig } from "vite";
import path from "path";
import RubyPlugin from "vite-plugin-ruby";
export default defineConfig({
resolve: {
alias: {
"@views": path.resolve(__dirname, "app/views"),
"@javascript": path.resolve(__dirname, "app/javascript"),
},
},
plugins: [RubyPlugin()],
});
Make sure you're using vite_javascript_tag
in your layout,
application.html.erb
.
And finally, one of the more manual process of using superglue is the manual build
of your page_to_page_mapping.js
file. We can improve the developer experience by
removing that step by using this snippet:
const pageIdentifierToPageComponent = {}
const pages = import.meta.glob('../views/**/*.jsx', {eager: true})
for (const key in pages) {
if (pages.hasOwnProperty(key)) {
const identifier = key.replace("../views/", "").split('.')[0];
pageIdentifierToPageComponent[identifier] = pages[key].default;
}
}
export { pageIdentifierToPageComponent }