Search code examples
javascriptreactjsnpmexpochild-process

InternalError Metro has encountered an error: While trying to resolve module `child_process`


I am trying to call a function in a python file from a js file, I got this to work through my console, but I am now trying to implement it in a mobile app using expo.

The way I had set this up is, I have the JS file for a certain screen in my app, this then calls a function in a separate JS file, which then calls the function in the python file.

I am using the child_process module to talk to python from JS.

And as I said, this was working before I tried to export the JS function to my screen file.

index.js



export function foo(process, sentence){

   const spawn = require("child_process").spawn;
   const process = spawn("python3", ["./python.py", sentence]);

   ...
}

screen.js

*other imports

import { foo } from "./filepath..."

...

But when I run npm start I get the following error:

Failed building JavaScript bundle.
While trying to resolve module `child_process` from file `/Users/mee/Documents/GitHub/project/app/screens/screen.js`, the package `/Users/mee/Documents/GitHub/project/node_modules/child_process/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/Users/me/Documents/GitHub/project/node_modules/child_process/app/screens/screen.js`. Indeed, none of these files exist:

How can I fix this?


Solution

  • It won't work for few reasons

    • child_process is part of the node standard library, it's not available in other environments like react-native or browser
    • even if above was not true, there is no python3 executable on your phone
    • python.py file from your local directory wouldn't be even uploaded to the phone because bundler is only uploading one big js file with entire js code combined + assets, python.py is neither of those.

    Only solution that make sense it to rewrite that code to javascript.

    Technically it's not impossible, there might be a way to do that, by compiling python interpreter for mobile platform, or using some tool that translates python code into js, but it's not something that you should consider.