Добавление стимулов и карт импорта в существующее приложение Rails 6.1

У меня есть приложение Rails 6.1, которое было обновлено с Rails 4 -> 5 -> 6, так что оно зрелое.

Он по-прежнему использует конвейер ресурсов, и в будущем Rails 7.0 я сохраню его таким же образом. Я хотел начать использовать стимулы + карты импорта , поэтому следил за установкой.

После установки importmaps и стимулов через hotwire я получаю следующие ошибки в Firefox 91 при загрузке моего приложения;

      Uncaught SyntaxError: import declarations may only appear at top level of a module
Uncaught TypeError: Error resolving module specifier “application”. Relative module specifiers must start with “./”, “../” or “/”.

Мой importmap.rb

      Rails.application.config.importmap.draw do
  pin "@hotwired/stimulus", to: "stimulus.js"
  pin "@hotwired/stimulus-importmap-autoloader", to: "stimulus-importmap-autoloader.js"
  pin_all_from "app/javascript/controllers", under: "controllers"

  pin "application"

  # Use libraries available via the asset pipeline (locally or via gems). # Rails 7.0 required
  # pin "@rails/actioncable", to: "actioncable.esm.js"     
  # pin "@rails/activestorage", to: "activestorage.esm.js" 

  # Use libraries directly from JavaScript CDNs (see https://www.skypack.dev, https://esm.sh, https://www.jsdelivr.com/esm)
  # pin "vue", to: "https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.esm.browser.js"
  # pin "d3", to: "https://esm.sh/d3?bundle"

  # Pin vendored modules by first adding the following to app/assets/config/manifest.js:
  # //= link_tree ../../../vendor/assets/javascripts .js
  # pin_all_from "vendor/assets/javascripts"
end

Я сохранил весь свой javascript в каталоге app / assets / javascripts, который по-прежнему должен обрабатываться конвейером ресурсов.

У меня есть следующее приложение / assets / javascripts / importmap.json.erb

      {
  "imports": { 
    "turbo": "<%= asset_path "turbo" %>",
    <%= importmap_list_with_stimulus_from "app/assets/javascripts/controllers", "app/assets/javascripts/libraries" %>
  }
}

application.js есть;

      // This is the main application.js, there can only be one.
//
// Configure your import map in config/importmap.rb

// import "@rails/actioncable"   // Rails 7.0 required
// import "@rails/activestorage" // Rails 7.0 required

import "@hotwired/stimulus-importmap-autoloader"

У меня также есть следующая строка в моем application.html.erb

      <%= stylesheet_link_tag    "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
<%= javascript_include_tag "turbo", type: "module-shim" %>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<%= yield :head %>
<%= javascript_importmap_tags %>

manifest.js есть;

      //= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
//= link_tree ../javascripts

1 ответ

Firefox изначально не поддерживает карты импорта. Вам нужно добавить полифилл с https://github.com/guybedford/es-module-shims .

Другие вопросы по тегам