ionic-team / capacitor

Build cross-platform Native Progressive Web Apps for iOS, Android, and the Web ⚑️
https://capacitorjs.com
MIT License
12.19k stars 1.01k forks source link

[Bug]: `yarn cap run` fails with yarn 4 - SyntaxError: Unexpected token 'E', "Error: spawn ENOTDIR" #7285

Open conlanpatrek opened 8 months ago

conlanpatrek commented 8 months ago

Capacitor Version

πŸ’Š Capacitor Doctor πŸ’Š

Latest Dependencies:

@capacitor/cli: 5.7.0 @capacitor/core: 5.7.0 @capacitor/android: 5.7.0 @capacitor/ios: 5.7.0

Installed Dependencies:

@capacitor/ios: not installed @capacitor/cli: 5.7.0 @capacitor/core: 5.7.0 @capacitor/android: 5.7.0

Other API Details

npm: 10.2.4
node: v21.6.1
pod: 1.11.3
yarn: 4.1.0

Platforms Affected

Current Behavior

Detail and full reproduction is in the linked repo, but:

Init an empty repository with yarn 4 (making sure the output of yarn --version isn't 1.x.x)

Go through the "Getting started" guide here and here using yarn instead of npm.

Try running yarn cap run android and see the stack trace generated

Expected Behavior

I expect yarn cap run android to run the simulator, but it does not.

Project Reproduction

https://github.com/conlanpatrek/capacitor-yarn-bug

Additional Information

I've seen several ghosts of this same issue opened and closed in the past couple of years in this repo, basically since yarn 2, but a lot of them were hit-and-runs that never got resolved. Hoping the minimum recreation helps.

I'm running macOS 14.2.1.

conlanpatrek commented 8 months ago

Following up. Are you having an okay time with the reproduction? Lmk if you need more info, or if yarn support > v1 is not on the table at all. I've already downgraded to work around the issue so I'm not hurting over here. πŸ‘

ionitron-bot[bot] commented 4 months ago

This issue has been labeled as type: bug. This label is added to issues that that have been reproduced and are being tracked in our internal issue tracker.

diegoflorez commented 2 weeks ago

I've encountered the same issue with Capacitor CLI 6.x. It doesn't work well with Yarn 4.x (Berry) due to the Plug'n'Play (PnP) system. However, I've found three workarounds that successfully resolve the problem:


  1. Switch to Node Linker: By setting Yarn to use the traditional node_modules structure, Capacitor works correctly. You can enable this by running:
yarn config set nodeLinker node-modules

After setting this, you will need to execute:

yarn install

And finally, it will execute correctly with:

yarn cap run android

  1. Open and Run the Project in Android Studio: Even if yarn cap run android fails, you can still open and run the project using Android Studio by executing the following command:
yarn cap open android

This opens the project in Android Studio, and it runs without issues from there.


  1. Add native-run as a Dev Dependency and Unplug It: If you prefer to keep Yarn's Plug'n'Play enabled, another solution is to add native-run as a dev dependency and then unplug it. This ensures that native-run behaves like it's in a traditional node_modules structure while keeping the rest of the project in PnP mode.

First, add native-run as a dev dependency:

yarn add native-run --dev

Then, unplug native-run:

yarn unplug native-run

Finally, install your dependencies:

yarn install

This way, Capacitor will work correctly without needing to switch to node_modules for the entire project.

I hope this helps others facing the same issue!