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

Rails 7中用Importmap整合Stimulus JS时控制器自动加载失败求助

解决Rails 7 Importmap + Stimulus的exports is not defined错误

核心问题

Failed to autoload controller: flash ReferenceError: exports is not defined这个错误的根源是你的flash_controller.js使用了CommonJS模块语法(比如module.exports),但Rails 7的Importmap和Stimulus默认采用**ES模块(ESM)**规范,浏览器无法识别CommonJS的exports变量。

修复步骤

  1. 修正控制器的导出语法
    打开app/javascript/controllers/flash_controller.js,将CommonJS写法替换为ES模块的默认导出:

    // 正确的ES模块写法
    import { Controller } from "@hotwired/stimulus"
    
    export default class extends Controller {
      // 控制器逻辑示例
      connect() {
        console.log("Flash控制器已连接")
      }
    }
    

    避免使用以下错误的CommonJS写法:

    // 错误写法(会触发exports未定义)
    import { Controller } from "@hotwired/stimulus"
    
    module.exports = class extends Controller {
      // ...
    }
    
  2. 验证Importmap配置
    你的config/importmap.rb配置是正常的,pin_all_from 'app/javascript/controllers', under: 'controllers'会自动将所有控制器映射为合法的ES模块路径,无需额外调整。

  3. 清理缓存并重启服务
    执行命令清理资产缓存,确保修改生效:

    bin/rails assets:clobber
    bin/rails server
    

    生产环境需额外执行bin/rails assets:precompile。

额外排查点

  • 如果问题仍存在,检查其他控制器(如shopify_controller.js)是否也使用了CommonJS语法;
  • 确认控制器中没有引入非ES模块的第三方依赖,若有需在importmap.rb中指定正确的ESM入口地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:45:35