在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-appnpm 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
相关产品推荐
相关产品推荐

