繁体   English   中英

Rails 6.1 刺激未加载资产管道

[英]Rails 6.1 stimulus not loading with asset pipeline

我有一个用 Rails 6.1 编写的大型应用程序,它仍在使用资产管道。 我正在尝试将其从使用 AngularJS(存储在资产管道中)转换为 hotwire-rails。 我已经加载了涡轮增压,现在我想让 Stimulus 工作。

它在 Ruby 2.7.4 上运行,我使用的是最新的 importmaps-rails (0.8.2)、turbo-rails (0.8.3) 和stimulus-rails (0.7.2)。

我已经完成了一个 rails 刺激:安装和 rails importmap:安装,当我重新加载我的应用程序并尝试使用 hello_controller 刺激进行测试时,我被困在屏幕上,而不是“Hello World” !”

我认为这个测试

<div data-controller="hello">
  foo
</div>

app/javascript/controller/hello_controller.js

import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  connect() {
    this.element.textContent = "Hello World!"
  }
}

宝石文件;

gem 'importmap-rails',
gem 'hotwire-rails'
gem 'turbo-rails'
gem 'stimulus-rails'

这是我为单独的热线视图加载的 application_html.erb 文件

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application_html' %>
    <%= javascript_include_tag "application_html" %>
    <%= turbo_include_tags %>
    <%= javascript_include_tag "turbo", type: "module-shim" %>
    <%= javascript_importmap_tags %>
  </head>
  <body>
    <%= yield :javascript %>
    <%= yield %>
  </body>
</html>

配置/importmap.rb

pin "application", preload: true
pin "@hotwired/stimulus", to: "stimulus.js", preload: true
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin_all_from "app/javascript/controllers", under: "controllers"
pin "@hotwired/turbo-rails", to: "turbo.js"

应用程序/javascript/application.js

import "controllers"
import "@hotwired/turbo-rails"

应用程序/javascript/控制器/application.js

import { Application } from "@hotwired/stimulus"

const application = Application.start()

// Configure Stimulus development experience
application.warnings = true
application.debug    = false
window.Stimulus      = application

export { application }

更新

如果我从 application_html.html.erb 文件中删除以下内容,则 turbo 将停止工作。

<%= javascript_include_tag "application_html" %>
<%= turbo_include_tags %>
<%= javascript_include_tag "turbo", type: "module-shim" %>

更新

进一步的调试使我认为我的 importmap-rails 没有正确加载。

在我创建了一个没有 webpack 的新 Rails 应用程序并尝试让 importmap 和资产管道 javascript 同时工作后解决了我的问题。

我发现我的遗留项目的问题是;

  1. 我错过了 manifest.js

     //= link_tree ../images //= link_directory ../stylesheets .css //= link_tree ../../javascript .js //= link_tree ../../../vendor/javascript .js //= link_tree ../javascripts .js
  2. 将资产管道中的 application.js 重命名为 application_angularjs.js

     cd app/assets/javascripts mv application.js application_angularjs.js
  3. 更改 application.html.erb 中的行(从,到)

    <%= javascript_include_tag "application" %>

    <%= javascript_include_tag "application_angularjs" %>
  4. 删除 application_html.erb 中的多余行

    <%= turbo_include_tags %> <%= javascript_include_tag "turbo", type: "module-shim" %>

在此之后,一切都变得生动起来,importmap 开始工作,我的刺激 hello 控制器示例也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM