Rails7 开始默认使用 importmap 作为 javascript 依赖的管理工具(类似于 npm)

遇到的问题
  1. 生成的项目工程目录下的 bin 目录中没有 importmap 命令
  2. turbo-rails 貌似没有被引入项目中(直接创建项目工程后没有进行相关配置)

# 安装 turbo-rails

  1. 安装 importmap
# step1. 安装 importmap
bin/rails·importmap:install

上述命令,主要会生成 bin/importmapconfig/importmap.rbapp/javascript/application.js 文件

  1. 通过 importmap 引入 turbo
# step2. 使用 importmap 管理 turbo 依赖
bin/importmap·pin·@hotwired/turbo

执行上述命令后, Rails 会自动往 config/importmap.rb 文件中加入依赖名称,并在 app/javascript/application.js 文件中导入 turbo-rails

config/importmap.rb
# Pin npm packages by running ./bin/importmap
pin "application"
pin "@hotwired/turbo-rails", to: "turbo.min.js"
app/javascript/application.js
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
import "@hotwired/turbo-rails"
  1. 安装 turbo
# step3 
bin/rails·turbo:install

# 使用 turbo-rails

使用 turbo_confirm 代替原先的 confirm ,例如:
<%= button_to "Empty cart", cart, method: :delete, form: { data: { turbo_confirm: "Are you sure?" } } %>

生成的 HTML 代码如下

<form data-turbo-confirm="Are you sure?" class="button_to" method="post" action="/carts/20">
  <input type="hidden" name="_method" value="delete" autocomplete="off">
  <button type="submit">Empty cart</button>
  <input type="hidden" name="authenticity_token" value="cxmrMyiULbRE9a3PrKRdSaFz90lhI7BnuQ45asjQjITJMsx-5186VueizTPDYklStOYWCtwSy_tRuc9mttDKOQ" autocomplete="off">
</form>
效果

效果

关于 Rails7+ 版本中使用 importmap ,可以参考 Import Maps Under the Hood in Rails 7 这篇文章

更新于 阅读次数