RobotWebTools / rclnodejs

Node.js version of ROS 2.0 client
https://docs.ros.org/en/humble/Concepts/Basic/About-Client-Libraries.html?highlight=rclnodejs#community-maintained
Apache License 2.0
311 stars 70 forks source link

rclnodejs cannot be used with React #926

Open JackHaleGreenfield opened 10 months ago

JackHaleGreenfield commented 10 months ago

Description rclnodejs generates a ReferenceError in the console log of ReactJS apps trying to use it. This error occurs simply by trying to call the init() function of the rclnodejs package (as per the typescript example in this project's README). Although the error message says is referencing the "process" package, manually installing "process" via npm does not resolve this error. The same behavior is seen with both Foxy and Humble versions of ROS2.

Steps To Reproduce

  1. npx create-remix
  2. source /opt/ros/foxy/setup.bash
  3. cd my-remix-app && npm install rclnodejs
  4. Modify app/routes/_index.tsx so that
    • import * as rclnodejs from 'rclnodejs'; is located at the top of the file
    • import { useEffect } from "react"; is located at the top of the file
    • useEffect(() => { rclnodejs.init().then(() => { console.log("init"); }); }, []); is located inside the Index() function
  5. npm run dev
  6. Open web browser and navigate to localhost:3000
  7. Open the browser's console log and refresh the page

Expected Behavior Console Log contains the following log message:

init

Actual Behavior Console Log contains the following error:

Uncaught ReferenceError: process is not defined js bindings.js:23 require2 chunk-PZDJHGND.js:18 js clock.js:17 require2 chunk-PZDJHGND.js:18 js index.js:19 __require2 chunk-PZDJHGND.js:18

_index.tsx:23
minggangw commented 10 months ago

@JackHaleGreenfield thanks for reporting this issue, the rclnodejs doesn't support web browser and it needs node.js, if you want to use web, you suggest you could leverage Electron. You can search the old issues that are relevant to Electron to see how to set it up.