react-native-community / cli

React Native command line tools

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Unable to start server in new window when using yarn with pnpm linker

jbroma opened this issue · comments

Environment

yarn v4 (berry) with nodeLinker: pnpm

Description

Running run-ios or run-android without dev server running results in:

error Node module directory for package .bin was not found.

This is caused by packages/cli-tools/src/startServerInNewWindow.ts relying on .bin directory which is not present when using yarn with nodeLinker: pnpm.

Reproducible Demo

https://github.com/jbroma/repro-rn-cli-start-server

Steps:

  1. run yarn
  2. run yarn run-ios or yarn run-android

Additional notes

Repro contains local fix equivalent to this fix, which will be released in 0.74.

hey @jbroma! thanks for raising issue, I can confirm that issue exist. I'm wondering what other temporary directory we can pick , because we're saving .packager.env under node_modules/.bin to make sure that every project has proper information assigned, so e.g. this kind of setups could work:

package.json
node_modules
    react-native/
packages/
    app-a
        node_modules
            .bin
    app-b
        node_modules 
            .bin

So by assuming every project has their specific .bin directory relevant app will use right information saved inside .packager.env file. We can't save them for example under require.resolve('react-native'), because probably in most monorepos setups apps across monorepo will use the same react-native package, and potentially pick wrong informations and it will cause very hard problems to debug.

cc: @tido64 do you have maybe any ideas where we could potential save it?

In RNTA, we always create node_modules/.generated relative to the project root. I think Babel does something similar for .cache. We could do something like that here? The alternative is to use the project folder itself, but that's another .gitignore entry that you have to maintain.