Actualicé mi aplicación a Rails 7 y la cambié de webpacker a shakapacker.
Es principalmente una interfaz de reacción, con algunas páginas antiguas en haml con jquery escuchando archivos js en aplicaciones/activos.
Shakapacker y la interfaz de reacción funcionan correctamente, las vistas de rieles se cargan (ni siquiera necesitan que se ejecute webpacker), pero los oyentes de jquery no se ejecutan ni escuchan las vistas de rieles.
aplicación/activos/javascripts/aplicación.js
Se está cargando, puedo ver a través del registro en la consola.
El archivo se ve así:
// This is a manifest file that'll be compiled into application.js, which will include all the files // listed below. // // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's // vendor/assets/javascripts directory can be referenced here using a relative path. // // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // compiled file. JavaScript code in this file should be added after the last require_* statement. // // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details // about supported directives. // console.log('Hello World from Webpacker 2') // = require jquery-3.3.1.min //= require popper //= require rails-ujs //= require cable //= require jquery-ui //= require activestorage //= require bootstrap //= require bootstrap-select //= require moment //= require tempusdominus-bootstrap-4 //= require jquery.easy-autocomplete.min //= require jquery.slimscroll.min //= require patch_modal //= require_treeLa aplicación React se carga cuando las rutas de los rieles que usan la interfaz de reacción se golpean con: <%= javascript_pack_tag 'react_app', crossorigin: "anonymous" %> <%= stylesheet_pack_tag 'react_app', crossorigin: "anonymous" %>
¿Hay algo más que deba configurar para obtener mis archivos js en app/assets/javascripts/*.js para compilar con shakapacker?
Sentí que solo funcionaba con webpacker, también probé algunos otros compiladores (jsbuild, vite) y también estuvo bien. Tuve que detenerme con ellos por otros problemas en mi lado de React.
Cualquier consejo o sugerencia es muy apreciada. Siento que he pasado demasiado tiempo haciendo feliz a Rails 7 con la interfaz.
¡¡Gracias!!
app/ ├─ assets/ # used by sprockets-rails │ └─ javascripts/ # not used in rails 7 by default │ └─ application.js # javascript_include_tag "application" │ └─ javascript/ # used by shakapacker and other js bundlers ├─ packs/ # webpack entries │ └─ application.js # javascript_pack_tag "application" │ └─ application.js # or this one (depending on `source_entry_path` in config/webpacker.yml) Shakapacker no debe procesar assets/javascripts/application.js , porque no sabe cómo procesar //= require directivas. Se manejan mediante ruedas dentadas .
Para cargar assets/javascripts/application.js , agregue esto a su diseño:
<%= javascript_include_tag "application" %> y verifique dos veces manifest.js , debería tener application.js :
//= link application.jsSprockets //= requiere con jsbundling-rails (esbuild): ¿cómo incluir JS proporcionado por gem?
Las directivas Sprockets se procesan solo en la parte superior del archivo:
// This is processed by sprockets and popper is required. //= require popper console.log("loaded") // After any code, it is a regular comment, nothing happens. //= require popper