nrwl / nx

Smart Monorepos · Fast CI
https://nx.dev
MIT License
23.43k stars 2.33k forks source link

yarn 2 / Plug N Play Support #2386

Closed Jordan-Hall closed 1 year ago

Jordan-Hall commented 4 years ago

Please make sure you have read the submission guidelines before posting an issue

Prerequisites

Yarn version 2.0.0-rc.27

Expected Behavior

Should work correctly like before

Current Behavior

Build failure

Failure Information (for bugs)

An unhandled exception occurred: Cannot locate the 'node_modules' directory. See "AppData\Local\Temp\ng-mO3oFO\angular-errors.log" for further details.

Steps to Reproduce

Please provide detailed steps for reproducing the issue.

  1. yarn dlx @yarnpkg/doctor .
  2. yarn install
  3. yarn start

Context

Yarn has finally released a usable version two. If you using webpack 4 you need to enable PlugNPlay which is native to webpack 5

https://yarnpkg.com/advanced/migration https://yarnpkg.com/advanced/pnpapi

Failure Logs

[error] Error: Cannot locate the 'node_modules' directory.
    at NgccProcessor.findNodeModulesDirectory (C:\dev\lec-migration\.yarn\$$virtual\@ngtools-webpack-virtual-9bdca6ad48\0\cache\@ngtools-webpack-npm-9.0.0-rc.10-6bfaf96715-1.zip\node_modules\@ngtools\webpack\src\ngcc_processor.js:113:15)
    at new NgccProcessor (C:\dev\lec-migration\.yarn\$$virtual\@ngtools-webpack-virtual-9bdca6ad48\0\cache\@ngtools-webpack-npm-9.0.0-rc.10-6bfaf96715-1.zip\node_modules\@ngtools\webpack\src\ngcc_processor.js:31:43)
    at C:\dev\lec-migration\.yarn\$$virtual\@ngtools-webpack-virtual-9bdca6ad48\0\cache\@ngtools-webpack-npm-9.0.0-rc.10-6bfaf96715-1.zip\node_modules\@ngtools\webpack\src\angular_compiler_plugin.js:554:33
    at SyncHook.eval [as call] (eval at create (C:\dev\lec-migration\.yarn\cache\tapable-npm-1.1.3-f1c2843426-1.zip\node_modules\tapable\lib\HookCodeFactory.js:19:10), <anonymous>:7:1)
    at SyncHook.lazyCompileHook (C:\dev\lec-migration\.yarn\cache\tapable-npm-1.1.3-f1c2843426-1.zip\node_modules\tapable\lib\Hook.js:154:20)
    at Object.webpack [as webpackFactory] (C:\dev\lec-migration\.yarn\cache\webpack-npm-4.41.2-efbe0580aa-1.zip\node_modules\webpack\lib\webpack.js:55:30)
    at createWebpack (C:\dev\lec-migration\.yarn\$$virtual\@angular-devkit-build-webpack-virtual-0beaa59de8\0\cache\@angular-devkit-build-webpack-npm-0.900.0-rc.10-7017fe1d56-1.zip\node_modules\@angular-devkit\build-webpack\src\webpack-dev-server\index.js:20:36)
    at Object.runWebpackDevServer (C:\dev\lec-migration\.yarn\$$virtual\@angular-devkit-build-webpack-virtual-0beaa59de8\0\cache\@angular-devkit-build-webpack-npm-0.900.0-rc.10-7017fe1d56-1.zip\node_modules\@angular-devkit\build-webpack\src\webpack-dev-server\index.js:46:12)
    at SwitchMapSubscriber.project (C:\dev\lec-migration\.yarn\$$virtual\@angular-devkit-build-angular-virtual-d79a835d58\0\cache\@angular-devkit-build-angular-npm-0.900.0-rc.10-f83f279b13-1.zip\node_modules\@angular-devkit\build-angular\src\dev-server\index.js:191:32)
    at SwitchMapSubscriber._next (C:\dev\lec-migration\.yarn\cache\rxjs-npm-6.5.3-bc949c0a94-1.zip\node_modules\rxjs\internal\operators\switchMap.js:49:27)
    at SwitchMapSubscriber.Subscriber.next (C:\dev\lec-migration\.yarn\cache\rxjs-npm-6.5.3-bc949c0a94-1.zip\node_modules\rxjs\internal\Subscriber.js:66:18)
    at C:\dev\lec-migration\.yarn\cache\rxjs-npm-6.5.3-bc949c0a94-1.zip\node_modules\rxjs\internal\util\subscribeToPromise.js:7:24
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

Other

Documentation suggested you add the fallowing into .yarnrc.yml nodeLinker: node-modules

When then produces the following error

Error: Something that got detected as your top-level application (because it doesn't seem to belong to any package) tried to access a package that is not declared in your dependencies       

Required package: @yarnpkg/fslib (via "@yarnpkg/fslib")
Required by: /C:/dev/lec-migration/node_modules/@yarnpkg/pnpify/lib/
vire commented 1 year ago

@vire when you say, it worked for you with yarn2, do you mean the Plug N Play version or the node_modules version?

Plug'n'Play version, without node_modules

amartincolby commented 1 year ago

So after reading through this, I assume that the conclusion is, Yarn PnP is not supported and there is no timeframe in which it will be supported? I am willing to transition to Pnpm in service of switching to Nx, but are there at least plans to make a future transition to PnP easy?

meeroslav commented 1 year ago

I'm happy to announce that we are working on the PnP support. A lot of the issues have been resolved already (you can try it out with the latest beta).

There are two known issues that we need to fix:

If you can, try this beta and let us know if you find any issues (apart from those listed above).

sushruth commented 1 year ago

@meeroslav this is the best news I have heard all year. Yarn pnp is not perfect but it is a great option to choose in the current JS ecosystem.

amartincolby commented 1 year ago

This could not have come at a better time. I was just balancing pure Yarn Workspaces vs Nx specifically because of this issue.

meeroslav commented 1 year ago

Swc compiler is fixed in the latest 16.6.0-beta.8

amartincolby commented 1 year ago

How do we enable Plug-n-Play? If I generate a workspace with yarn v3, it successfully uses yarn Berry but does not generate a .pnp.cjs file. It still defaults to using nodeLinker:node-modules.

meeroslav commented 1 year ago

You can use this reference: https://nx.dev/recipes/tips-n-tricks/yarn-pnp

We do not provide a flag for create-nx-workspace to enable PnP automatically.

meeroslav commented 1 year ago

Currently, our @nx/angular package is the only one not supporting PnP due to third-party blockers.

If you detect any issues with any other package, please report it here.

meeroslav commented 1 year ago

The latest beta has all the changes related to Yarn PnP support. This concludes this feature request.

If you find any problems with Yarn PnP, please open a new issue. Thank you for your patience!

github-actions[bot] commented 1 year ago

This issue has been closed for more than 30 days. If this issue is still occuring, please open a new issue with more recent context.