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

Ruby on Rails+react-rails应用中模块找不到的问题求助

问题描述

我有一个Ruby on Rails应用,尝试为现有视图添加一个带依赖包的react-rails组件。不带依赖包时,React组件能在.erb视图中正常加载,组件位于/app/javascript/components目录下。但在HelloWorld.jsx组件中导入模块后,应用崩溃并提示找不到模块。

错误信息:

Uncaught Error: Cannot find module 'connectkit'
    at webpackMissingModule (application.js:1:1)
    at Module.<anonymous> (application.js:1:1)
    at ./app/javascript/packs/application.js (application.js:62:1)
    at __webpack_require__ (bootstrap:19:1)
    at bootstrap:83:1
    at bootstrap:83:1

我已使用yarn add <module_name>安装了相关模块,且在package.json和node_modules中能看到对应包。尝试删除node_modules文件夹并重新安装,但问题仍未解决。注释掉导入语句时组件能正常运行,一旦添加导入就会出现上述错误。

组件代码:

import React from 'react';
import PropTypes from 'prop-types';
import { WagmiConfig, createClient } from 'wagmi';  // 导入这些会导致组件崩溃
import { ConnectKitProvider, ConnectKitButton, getDefaultClient } from 'connectkit'; // 导入这些会导致组件崩溃,去掉就能正常运行

const alchemyId = process.env.ALCHEMY_ID;

const client = createClient(
  getDefaultClient({
    appName: 'Your App Name',
    alchemyId,
  })
);

class HelloWorld extends React.Component {
  render() {
    return (
      <React.Fragment>
        <WagmiConfig client={client}>
          <ConnectKitProvider>
            Greeting: {this.props.greeting}
            <ConnectKitButton />
          </ConnectKitProvider>
        </WagmiConfig>
        Greeting: {this.props.greeting}
      </React.Fragment>
    );
  }
}

HelloWorld.propTypes = {
  greeting: PropTypes.string,
};
export default HelloWorld;
解决步骤
  • 检查Webpack模块解析配置
    如果你使用Webpacker,打开config/webpack/environment.js,确保node_modules被包含在模块解析路径中:

    const { environment } = require('@rails/webpacker');
    
    environment.resolve.modules.prepend('node_modules');
    module.exports = environment;
    

    保存后重启Webpack开发服务器。

  • 确认依赖版本兼容性
    检查wagmi和connectkit的版本是否与项目的React、Webpack版本匹配。比如connectkit需要特定版本的wagmi支撑,查看官方文档后安装对应兼容版本:

    yarn add wagmi@^1.0.0 connectkit@^1.0.0
    
  • 重启开发服务
    Rails的Webpack开发服务器可能缓存了旧的依赖信息,修改依赖后完全重启服务:

    bin/webpack-dev-server stop
    bin/rails s
    
  • 验证环境变量配置
    组件中用到的process.env.ALCHEMY_ID需要在项目中正确配置。在.env文件中添加:

    ALCHEMY_ID=你的Alchemy ID
    

    确保dotenv-rails gem已安装并在项目中加载。

  • 确认组件打包入口
    检查app/javascript/packs/application.js,确保components目录下的组件被正确加载:

    import "@hotwired/turbo-rails"
    import "controllers"
    import React from 'react'
    import ReactDOM from 'react-dom/client'
    
    // 自动加载components目录下的所有JSX组件
    const components = require.context('../components', true, /\.jsx$/)
    components.keys().forEach(components)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:23:30