You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Rails 7 Importmaps在原生Rails应用中加载Uppy?

Rails 7 Importmaps 加载 Uppy 的解决方案

错误原因

出现这些语法错误的核心原因是:Uppy 的部分依赖(比如 classnames、mime-match)属于CommonJS 模块,而 Rails Importmaps 默认优先处理 ES 模块。当代码尝试用 import X from 'module' 这种默认导入语法加载没有默认导出的 CommonJS 模块时,浏览器就会抛出导出解析错误。

可行解决方案

完全可以通过 Importmaps 在 Rails 7 中加载 Uppy,只需处理好 CommonJS 依赖的兼容问题,以下是具体步骤:

1. 使用 Importmaps Shim 自动处理兼容

Rails Importmaps 提供了 shim 命令,可以自动将 CommonJS 模块转换为 ES 模块兼容的格式:

# 先 pin Uppy 核心
bin/importmap pin @uppy/core
# 为 Uppy 及其依赖生成 shim 配置
bin/importmap shim @uppy/core

执行后,config/importmap.rb 会自动为所有需要兼容的依赖添加 shim 声明,比如为 classnames 添加 exports: "default",让浏览器可以识别默认导入。

2. 手动调整 Shim 配置(如果自动 shim 不生效)

如果自动 shim 后仍有错误,可以手动修改 config/importmap.rb,为特定依赖添加 shim:

# 示例:为 classnames 添加 shim
pin "classnames", to: "https://ga.jspm.io/npm:classnames@2.3.2/index.js"
shim "classnames", exports: "default"

# 为 mime-match 添加 shim
pin "mime-match", to: "https://ga.jspm.io/npm:mime-match@1.0.2/index.js"
shim "mime-match", exports: "default"

3. 在 Stimulus 控制器中正确导入使用

完成上述配置后,就可以在 Stimulus 控制器中正常导入 Uppy:

import { Controller } from "@hotwired/stimulus"
import Uppy from '@uppy/core'

export default class extends Controller {
  connect() {
    // 初始化 Uppy
    const uppy = new Uppy({
      debug: true,
      autoProceed: false
    })

    // 添加插件或配置(如需使用插件,需先 pin 并 shim 对应插件)
    // 示例:加载 Dashboard 插件
    // import Dashboard from '@uppy/dashboard'
    // uppy.use(Dashboard, { target: this.element })
  }
}

4. 处理 Uppy 插件的兼容

如果需要使用 Uppy 的插件(比如 @uppy/dashboard),同样需要先 pin 再 shim:

bin/importmap pin @uppy/dashboard
bin/importmap shim @uppy/dashboard

注意事项

  • 尽量使用 Uppy 的最新稳定版本,新版本对 ES 模块的支持更好
  • 若遇到特定依赖的错误,直接查看浏览器控制台的错误信息,定位到对应模块后手动添加 shim 即可
  • 确保 app/javascript/application.js 中已经正确导入了 Importmaps:import "@hotwired/turbo-rails"; import "controllers"; import "importmap"

内容的提问来源于stack exchange,提问作者deets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:32:38