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

在Rust中运行React应用遇模块找不到问题求助

React应用启动失败:找不到'../scripts/start'模块的解决方法

问题背景

尝试通过Rust函数运行React应用,main_command和参数从.toml文件读取后组合为sudo npm start。此前因目录权限不足报错,已为node_modules/.bin/react-scripts添加执行权限,但仍提示找不到'../scripts/start'模块。

相关Rust代码

pub fn run_wrangler(config: ProjectConfig) {
    let mut chmod_command = Command::new("chmod");
    let perm_path = format!("{}/{}", config.path.clone(), "node_modules/.bin/react-scripts");
    chmod_command.arg("+x").arg(PathBuf::from(perm_path));

    match chmod_command.status() {
        Ok(status) if status.success() => {
            println!("Successfully set execute permissions for react-scripts.");
        },
        Ok(status) => {
            eprintln!("Failed to set execute permissions, exit status: {}", status);
            return;
        },
        Err(e) => {
            eprintln!("Failed to run chmod: {}", e);
            return;
        }
    }


    let (main_command, args) = fragment_command(config.wrangler_config.build.command);
    println!("Project dir: {}", config.path);

    let mut command = Command::new("sh");
    command.arg("-c");
    command.arg(format!("{} {}", main_command, args.join(" ")));
    command.current_dir(PathBuf::from(config.path));  // Set the working directory

    match command.output() {
        Ok(output) => {
            let stdout = String::from_utf8_lossy(&output.stdout);
            let stderr = String::from_utf8_lossy(&output.stderr);

            println!("Stdout: {}", stdout);
            println!("Stderr: {}", stderr);
        },
        Err(e) => {
            eprintln!("Error: {}", e);
            return;
        }
    }
}

运行错误日志

Stdout

> my-app@0.1.0 start
> react-scripts start

Stderr

node:internal/modules/cjs/loader:1215
  throw err;
  ^

Error: Cannot find module '../scripts/start'
Require stack:
- /Users/---/Desktop/Coding/cloudflare/worker/my-app/node_modules/.bin/react-scripts
    at Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
    at Function.resolve (node:internal/modules/helpers:133:19)
    at Object.<anonymous> (/Users/---/Desktop/Coding/cloudflare/worker/my-app/node_modules/.bin/react-scripts:31:23)
    at Module._compile (node:internal/modules/cjs/loader:1460:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1544:10)
    at Module.load (node:internal/modules/cjs/loader:1275:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at wrapModuleLoad (node:internal/modules/cjs/loader:212:19)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:158:5)
    at node:internal/main/run_main_module:30:49 {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/Users/---/Desktop/Coding/cloudflare/worker/my-app/node_modules/.bin/react-scripts'
  ]
}

Node.js v22.3.0

解决方法

  • 重新安装完整依赖:删除项目目录下的node_modules文件夹和package-lock.json文件,执行npm install重新安装所有依赖,解决因依赖安装不完整导致的脚本缺失问题。
  • 移除sudo运行npm:使用sudo会改变运行环境的用户上下文,导致Node.js无法正确解析相对路径。先修改项目目录的所有者权限:
    sudo chown -R $USER:$USER /Users/---/Desktop/Coding/cloudflare/worker/my-app
    
    之后直接运行npm start即可,无需sudo。
  • 调整Rust命令执行方式:避免用sh -c包裹命令,直接调用npm并传入参数,确保工作目录正确。修改后的代码片段:
    // 替换原有的命令构建部分
    let mut command = Command::new("npm");
    command.arg("start");
    command.current_dir(PathBuf::from(config.path));
    
  • 检查react-scripts完整性:确认node_modules/react-scripts/scripts/start.js文件存在。如果不存在,单独安装react-scripts:
    npm install react-scripts --save
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:35:12