Chaudhry Talha
Chaudhry Talha

Reputation: 7808

Cannot read properties of undefined (reading 'transformFile') at Bundler.transformFile

I have updated node today and I'm getting this error:

error: TypeError: Cannot read properties of undefined (reading 'transformFile')
    at Bundler.transformFile (/Users/.../node_modules/metro/src/Bundler.js:48:30)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Object.transform (/Users/.../node_modules/metro/src/lib/transformHelpers.js:101:12)
    at async processModule (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:137:18)
    at async traverseDependenciesForSingleFile (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:131:3)
    at async Promise.all (index 0)
    at async initialTraverseDependencies (/Users/.../node_modules/metro/src/DeltaBundler/traverseDependencies.js:114:3)
    at async DeltaCalculator._getChangedDependencies (/Users/.../node_modules/metro/src/DeltaBundler/DeltaCalculator.js:164:25)
    at async DeltaCalculator.getDelta (/Users/.../node_modules/metro/src/DeltaBundler/DeltaCalculator.js:94:16)

Other than that I haven't done anything unusual, so I'm not sure what to share. If I'm missing any info please comment and I'll add it.

While building the terminal also throws this error:

Failed to construct transformer:  Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:67:19)
    at Object.createHash (node:crypto:130:10)
    at stableHash (/Users/.../node_modules/metro-cache/src/stableHash.js:19:8)
    at Object.getCacheKey (/Users/.../node_modules/metro-transform-worker/src/index.js:593:7)
    at getTransformCacheKey (/Users/.../node_modules/metro/src/DeltaBundler/getTransformCacheKey.js:24:19)
    at new Transformer (/Users/.../node_modules/metro/src/DeltaBundler/Transformer.js:48:9)
    at /Users/.../node_modules/metro/src/Bundler.js:22:29
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

My node, npx and react-native versions are:

Upvotes: 89

Views: 147259

Answers (26)

Alistor
Alistor

Reputation: 149

This solution worked for me

if you can't find this path just check ".../node_modules/metro-cache/src/stableHash.js

enter image description here

Upvotes: 2

Shubham Kamble
Shubham Kamble

Reputation: 1

This worked for me:

nvm install 16

nvm use 16

check if node version changed to 16 using "npx react-native info"

then run "npm install"

Upvotes: 0

Ali Abbas
Ali Abbas

Reputation: 681

  • If you are encountering this issue:
    • Run the following command in the terminal where Metro is running:
      export NODE_OPTIONS=--openssl-legacy-provider
      
    • For React Native:
      • Run the above command.
      • Then, run the following command to spin up the Metro bundler:
        npm start
        

Upvotes: 1

Jaydeep Kataria
Jaydeep Kataria

Reputation: 867

Fixed this by updating updating node_modules/react-native/scripts/find-node.sh @ L7

set -e change with

 set +e

P.S. Tried switching node from nvm to brew but that didn't made any difference.

I have tried all methods then I have found this one it solves my issue this below is refrenece

https://github.com/facebook/react-native/issues/36762#issuecomment-1535910492

Hope you can solve yours!

Upvotes: 1

cooperw
cooperw

Reputation: 1

I encountered this issue when trying to build my Android app. My shell and Android Studio were using different node binaries.

I discovered this by running which node in my zsh shell terminal and in Android Studio's terminal. You can access the terminal in Android Studio with View > Tool Windows > Terminal.

In my case, Android Studio was using Node installed by Brew, while my zsh terminal was using Node managed by NVM. I don't use the Node binary installed by Brew, so I uninstalled it with brew uninstall node. Android Studio then used the same Node binary as my zsh terminal, and I could then build my Android app.

Upvotes: 0

MDalt
MDalt

Reputation: 1801

In case anyone else is struggling after reading the whole internet, for me the answer was to upgrade react-native-svg-transformer from 1.10 to 1.30. I had already tried things like passing --openssl-legacy-provider so that might also be necessary as well.

Upvotes: 0

Muzammil
Muzammil

Reputation: 1539

Try running this

NODE_OPTIONS=--openssl-legacy-provider 
npm run start:reset 

Upvotes: 1

Emmanuel Ajaero
Emmanuel Ajaero

Reputation: 19

Your metro might be probably running somehow. Restart you computer before trying anything fancy

Upvotes: -1

Herman
Herman

Reputation: 240

Just throwing this out there. If you use watchFolders in metro.config.js, make sure you remove that key before building! That fixed it for me. It's useful if you are npm linking other packages but obviously eas build will not be able to find those links.

Upvotes: 0

Arun sankar S
Arun sankar S

Reputation: 421

Run:

export NODE_OPTIONS=--openssl-legacy-provider

To make connection to openssl

Upvotes: 22

Engr.Aftab Ufaq
Engr.Aftab Ufaq

Reputation: 6222

This issue is due to the difference between node version you are currently using for example node version 19 and node version used by the project.

To Solve this issue you need to downgrade or upgrade according to the node version used by project and your current node version.

you have to install node first and then then install nvm (NODE VERSION MANAGER). nvm is a node version manager with which you can install multiple node version

CURRENT LTS OLD STABLE OLD UNSTABLE
19.2.0 18.12.1 0.12.18 0.11.16
19.1.0 18.12.0 0.12.17 0.11.15
19.0.1 16.18.1 0.12.16 0.11.14
19.0.0 16.18.0 0.12.15 0.11.13
18.11.0 16.17.1 0.12.14 0.11.12
18.10.0 16.17.0 0.12.13 0.11.11
18.9.1 16.16.0 0.12.12 0.11.10
18.9.0 16.15.1 0.12.11 0.11.9
18.8.0 16.15.0 0.12.10 0.11.8
18.7.0 16.14.2 0.12.9 0.11.7
18.6.0 16.14.1 0.12.8 0.11.6
18.5.0 16.14.0 0.12.7 0.11.5
18.4.0 16.13.2 0.12.6 0.11.4
18.3.0 16.13.1 0.12.5 0.11.3
18.2.0 16.13.0 0.12.4 0.11.2
18.1.0 14.21.1 0.12.3 0.11.1
18.0.0 14.21.0 0.12.2 0.11.0
17.9.1 14.20.1 0.12.1 0.9.12
17.9.0 14.20.0 0.12.0 0.9.11
17.8.0 14.19.3 0.10.48 0.9.10

To Install nvm please follow this Link

After this you can use the following nvm commands

nvm ls

// install specific version of node
nvm install 6.9.2

// set default version of node
nvm alias default 6.9.2

// switch version of node
nvm use 6.9.1

Upvotes: 6

Harshal Singh
Harshal Singh

Reputation: 1

I tried every solution on the internet but none of them helped, check if nothing's working then you must be having nodejs and node in your system. You can check on your terminal with node -v and nodejs -v

Uninstall nodejs

sudo apt-get uninstall nodejs

and you're good to go!

Upvotes: -11

The error comes from the node version. So, you will need to downgrade.

npx react-native info - // to see what node version your project uses.

nvm list // to see all available node version

nvm install 16.18.0 // to install the version you want

nvm use 16.18.0  // use the installed version

OR

nvm alias default 16 // use the installed version as DEFAULT

Upvotes: 4

civani mahida
civani mahida

Reputation: 342

Solution which works for me. Try to generate your main.jsbundle file with the below react-native command and verify it in your iOS folder.

1)Delete your pods folder and Podfile.lock file

2)run command

react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'

3)After that run below command

npm start -- --reset-cache

Upvotes: 1

Yuvraj Patil
Yuvraj Patil

Reputation: 8726

  1. Use node version 16.12.0. If you are using nvm, set default node version to 16.12.0. You can use following command
nvm alias default 16.12.0
  1. Remove node_modules folder. You can use following command:
rm -rf node_modules 
  1. Run the android run command again

Upvotes: 2

DoneDeal0
DoneDeal0

Reputation: 6257

If you use an older osx version, you may need to add an nvm script to your zshrc file. Here is how to do so:

  • in your terminal, type open ~/.zshrc
  • in your .zshrc file, copy paste the following code:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
  • go back to your terminal and run source ~/.zshrc

Now nvm will work.

Upvotes: 2

Umair Malhi
Umair Malhi

Reputation: 585

I am using Expo CLI with Node.js 17 and encountered the same error, and found the hint to the resolution (without downgrading Node.js) from here: https://github.com/facebook/react-native/issues/33107#issuecomment-1042612307

However, instead of using export I installed cross-env as devDependency by running the following command: npm i --save-dev cross-env

Then I added the following command against start script in package.json under scripts section.

"start": "cross-env NODE_OPTIONS=--openssl-legacy-provider expo start"

Upvotes: 4

Mostafa Mohammadzadeh
Mostafa Mohammadzadeh

Reputation: 911

First, you have to install the node version manager:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

or:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

after installation, (if you are on Linux, close and reopen your terminal and) test it:

nvm -v

then install the node version 16.3.0:

nvm install 16.13.0

and ask the nvm to use this version:

nvm use 16.13.0

Upvotes: 3

uzai sindiko
uzai sindiko

Reputation: 649

you can resolve it by downgrading the node js

> nvm list // to see all available node version

> nvm install 16.13.0 // to install the version I wanted 

> nvm use 16.13.0  // use the installed version 
OR
> nvm alias default 16 // use the installed version as DEFAULT 

Upvotes: 47

Trithir
Trithir

Reputation: 91

I tried different node versions...same error. Uninstalled and tried new versions of Android Studio...same error. Started brand new projects from scratch...same error. Deleted node_modules and ran npm i...same error.

Here's what did work for me.

Run

npx react-native info

Towards the top of that readout, it should say what Node version you are using. (it told me I was using Node: 17.xx.x in a stray node_modules folder.)

My fix was simply renaming that folder(in case deleting it breaks a different project). Now when I run npx react-native info it tells me the correct node version(16.13.1) and all my projects are running in the emulator again!

Upvotes: 9

Fotios Tsakiris
Fotios Tsakiris

Reputation: 1558

In case, you do the steps of @uzai sindiko and when you try to build, it fails again. And if you close the terminal, and then you check again node version, it says 17.3.1.

Then after you set nvm use 16.13.0 do also nvm uninstall 17.3.1 and then your project will be build.

Thanks

Upvotes: 1

Meet Shah
Meet Shah

Reputation: 21

check your node version first using nvm list uninstall the unnecessary version of node using nvm uninstall version change the version with the version number which is in use. install the new version of node using nvm install version_number use the installed version of node using nvm use version_number . Replace version_number with the version of node you have installed.

Upvotes: 1

Sally Azulay
Sally Azulay

Reputation: 431

had the same issue. downgrade to version 16.13.1 from 17.3.0 and it worked great.

Upvotes: 1

Giuseppe De Sio
Giuseppe De Sio

Reputation: 41

I experienced the same issue. Seems that the problem is due to version 17.x of Node.js. I solved downgrading to Node.js 16.12.0.

Upvotes: 1

memoalv
memoalv

Reputation: 1222

Ran into the same issue with Node.js 17.0.0. To solve it, I downgraded to version 14.18.1, deleted node_modules and reinstalled.

Upvotes: 109

Georgi Marinov
Georgi Marinov

Reputation: 91

Quick and dirty workaround (worked for me):

Add or update your package.json engines section with something like this to stop trying to build with Node 17.0.x Current, until you resolve the new OpenSSL PKCS8 format in the tls module:

  "engines": {
    "node": "<17",
    "npm": "<8.2"
  },

Upvotes: 2

Related Questions