Rails 6从turbolinks升级到turbo,如何在application.js中要求使用turbo-rails?

7

我正在处理一个遗留应用程序,最近升级到Rails 6.0.4版本。该应用程序使用的是sprockets,而不是webpacker

现在我正试图将应用从turbolinks移至turbo-rails。此应用程序中的js文件都使用sprockets require指令,例如:

//= require jquery3
//= require turbolinks

我似乎无法弄清楚如何将此应用于turbo-rails。我已安装了gem并删除了turbolinks,但我找到的所有文档中都有像import "@hotwired/turbo-rails"这样的内容。

我对前端不是很了解,但我认为这是一种不同的(ES6?)语法。此应用程序目前在sprockets 3.7.2上,我认为sprockets在版本4之前不支持ES6。如果可能的话,我希望避免此升级影响更多依赖项...

是否可以以与我当前拥有的//= require turbolinks相同的方式//= require turbo?'


2
我看到了一个/app/assets/javascript/turbo.js文件 https://github.com/hotwired/turbo-rails/blob/main/app/assets/javascripts/turbo.js,看起来你可以使用`//= require turbo`,因为这是文件的名称,而且Sprockets可以在宝石内查找这些文件夹中的文件。不确定是否足够,但这应该是一个开始。 - arieljuod
@arieljuod 谢谢。谢谢,我之前尝试过这个方法,但似乎在我的 $(document).on("turbolinks:load" 中不起作用。但是,我猜测在资产编译期间没有错误意味着文件已被找到。所以我又试了一次,现在我注意到 web 控制台中出现了这个错误:Uncaught SyntaxError: export declarations may only appear at top level of a module 指向 Uncaught SyntaxError: export declarations may only appear at top level of a module。所以我猜测文件确实被找到了,但还有其他问题吗? - sixty4bit
我不会期望 Turbo 有相同的事件。我建议你先考虑是否应该先离开 Sprockets,然后再切换到 Turbo,以避免做大量重复的工作。 - max
https://gorails.com/episodes/upgrade-from-turbolinks-to-hotwire-and-turbo - Greg
1
//= require turbo 解决了我的问题,因为我不需要也不使用 webpack/webpacker。 - Sean Mitchell
1个回答

2
为了使用turbo-rails,您必须设置资产管道以转换ES6。我当前的sprockets版本(3.7.2)无法实现这一点,因此我有两个选择:
  • 升级到sprockets 4
  • 切换到使用webpacker来处理资产管道的Javascript部分
有了其中之一,我应该能够使用import "@hotwired/turbo-rails"

1
即使使用了更新版本的sprockets,你仍然需要使用//= require turbo而不是import "@hotwired/turbo-rails"。 - Sean Mitchell
@SeanMitchell 在Rails 7中是否可以使用//= require turbo?我正在尝试在sprockets-rails v3.4.0(当前版本)中使用,没有使用转译器/webpacker/importmap,但是Rails找不到turbo - nimmolo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接