Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Case Study] Make yarn v2 work with flow #634

Open
lhorie opened this issue Dec 13, 2019 · 6 comments
Open

[Case Study] Make yarn v2 work with flow #634

lhorie opened this issue Dec 13, 2019 · 6 comments
Assignees
Labels

Comments

@lhorie
Copy link

@lhorie lhorie commented Dec 13, 2019

What package is covered by this investigations?

flow-bin

Describe the goal of the investigation

It should be possible to use flow in a codebase.

Investigation report

I've put together a small repo demonstrating that flow doesn't work with yarn v2: https://github.com/lhorie/flow-berry

# repro steps
git clone git@github.com:lhorie/flow-berry.git
cd flow-berry
yarn
yarn flow

Produces this error:

internal/child_process.js:366
    throw errnoException(err, 'spawn');
    ^

Error: spawn ENOTDIR
    at ChildProcess.spawn (internal/child_process.js:366:11)
    at spawn (child_process.js:551:9)
    at Object.<anonymous> (/Users/lhorie/Documents/flow-berry/.yarn/cache/flow-bin-npm-0.114.0-2e7dec7caf-1.zip/node_modules/flow-bin/cli.js:14:3)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at Function.external_module_default.a._load (/Users/lhorie/Documents/flow-berry/.pnp.js:7963:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

I've also tried suggestions from this thread, but without success.

Flow works w/ yarn 1.x and npm

@arcanis

This comment has been minimized.

Copy link
Member

@arcanis arcanis commented Dec 13, 2019

This will be difficult (and I won't implement it).

Two blockers:

  • Flow is written in OCaml. This means that we cannot mount the zip file system on top of fs. Because of that, Flow has to have native support for zip archives. I pushed for it when I was at FB but it never happened, so I don't expect it to change anytime soon.

  • FB doesn't use PnP at the moment as they hit integration issues with their Buck setup, and noone really dared to confront it. As an unfortunate side effect, Flow silently removed support for the custom resolvers a few months ago (in 0.110, apparently).

On the other hand TypeScript is written in JS, so even if they don't support PnP natively (yet, but we're working with them to find an appropriate way that satisfies both sides) we can implement it through PnPify, which simulates a n_m folder.

I realize it's not the answer you hoped for, and I'm really sorry not to have better news in this regard ...


One last thing of interest is that @larixer is working on implementing a n_m linker for Yarn 2 (you can follow the development in #470). This will allow your projects to keep using node_modules until you're ready to migrate to PnP. Unfortunately this also means that you won't benefit from the PnP perf, stability improvements, and some features, but ... tradeoffs tradeoffs. At least you'll get the rest of the CLI improvements, and will be able to use the Yarn plugin interface etc.

@kaushalyap

This comment has been minimized.

Copy link

@kaushalyap kaushalyap commented Feb 12, 2020

I also need this in order to move to Yarn 2, any workarounds?

@arcanis

This comment has been minimized.

Copy link
Member

@arcanis arcanis commented Feb 12, 2020

The only one is to use the node_modules linker until Flow implements PnP support (if ever):

.yarnrc.yml

nodeLinker: node-modules
@AndrewPardoe

This comment has been minimized.

Copy link

@AndrewPardoe AndrewPardoe commented Feb 16, 2020

The Flow team has no plans to adopt support for Yarn 2 or PNP. The primary use case for Flow at Facebook is in support of React code. Christoph Nakazawa of the React Native team has publicly stated that they have no immediate plans to support Yarn 2. There's a more thorough discussion here. Dan Abramov, from the React Core team, concurred, "We’re still using 1.x at FB and there are no immediate plans to switch to 2.x as that would be a ton of work."

@arcanis, I've edited my comment to be more precise. Feel free to reach out to me directly in the future.

@sberney

This comment has been minimized.

Copy link

@sberney sberney commented Feb 17, 2020

As an unfortunate side effect, Flow silently removed support for the custom resolvers a few months ago (in 0.110, apparently).

Is not at all expected. It took me a long time to hunt down this not-really-a-solution; especially since I came across a few examples of using custom resolvers (which didn't work). It might be useful to have a prominently featured partial list of common tools that don't work with yarn 2.

Please make it all work together!

@arcanis

This comment has been minimized.

Copy link
Member

@arcanis arcanis commented Feb 17, 2020

Yep, that's a good idea - we have a compatibility table, PRs welcome to track tools that are still missing (I'll open one for Flow and React Native myself).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
5 participants
You can’t perform that action at this time.