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

Plugin doesn't respect optional peerDependencies #2

Open
anbraten opened this issue Mar 1, 2021 · 1 comment
Open

Plugin doesn't respect optional peerDependencies #2

anbraten opened this issue Mar 1, 2021 · 1 comment

Comments

@anbraten
Copy link

anbraten commented Mar 1, 2021

I have a project using this plugin and mongodb (mongoose) as a dependencies.
Mongodb has mongodb-client-encryption and aws4 as optional peerDependencies:

[...]
 "peerOptionalDependencies": {
    [...]
    "mongodb-client-encryption": "^1.0.0",
     [...]
  },
"peerDependenciesMeta": {
    [...]
    "mongodb-client-encryption": {
      "optional": true
    },
   [...]
    "aws4": {
      "optional": true
    }
  },
[...]

and tries to require them inside a try / catch, so esbuild sends them to this plugin via build.onResolve().

It fails with the following errors:
 > pnp:/home/anton/Projects/pnp-bug/.yarn/$$virtual/ws-virtual-535d9b46ac/0/cache/ws-npm-7.4.3-0b722707c3-493655b7c4.zip/node_modules/ws/lib/buffer-util.js: error: [pnp-plugin] ws tried to access bufferutil (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.

Required package: bufferutil (via "bufferutil")
Required by: ws@virtual:d28d90fcce8f835b192578396e8f5173b2b8b328b7cfef0576840b7a542ac690165edbef41106c1d84e3785afed3d0e0f75720e95cf3e9fc4449f815cf17d425#npm:7.4.3 (via /home/anton/Projects/pnp-bug/.yarn/$$virtual/ws-virtual-535d9b46ac/0/cache/ws-npm-7.4.3-0b722707c3-493655b7c4.zip/node_modules/ws/lib/)
Ancestor breaking the chain: engine.io@npm:4.1.1
Ancestor breaking the chain: jsdom@virtual:51b2d3db5940cbda81797992a2f896453e18927005ba88742e0fe2eeb71cfb090b53a8594298c25967a351a8b709cd58d3612e5feba8c79a7b59ae3338b0722b#npm:16.4.0


    105 │   const bufferUtil = require('bufferutil');
        ╵                              ~~~~~~~~~~~~

 > pnp:/home/anton/Projects/pnp-bug/.yarn/$$virtual/mongodb-virtual-1a6d487e1f/0/cache/mongodb-npm-3.6.3-3206384cb1-85a8064180.zip/node_modules/mongodb/lib/operations/connect.js: error: [pnp-plugin] mongodb tried to access mongodb-client-encryption (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.

Required package: mongodb-client-encryption (via "mongodb-client-encryption")
Required by: mongodb@virtual:4aa8df445eee8963fd8c1f58ef19305d83825503b1218ced8747fba919196c60e8a0029dc817a11e9c3f061c3db32887f679974bfcd5f68685331fd0236da61f#npm:3.6.3 (via /home/anton/Projects/pnp-bug/.yarn/$$virtual/mongodb-virtual-1a6d487e1f/0/cache/mongodb-npm-3.6.3-3206384cb1-85a8064180.zip/node_modules/mongodb/lib/operations/)
Ancestor breaking the chain: mongoose@https://github.com/raphaelschwinger/mongoose.git#commit=734e82191feb2f9b51a946c5b2589f4f55ff61af


    501 │       require.resolve('mongodb-client-encryption');
        ╵                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~

 > pnp:/home/anton/Projects/pnp-bug/.yarn/$$virtual/mongodb-virtual-1a6d487e1f/0/cache/mongodb-npm-3.6.3-3206384cb1-85a8064180.zip/node_modules/mongodb/lib/operations/connect.js: error: [pnp-plugin] mongodb tried to access mongodb-client-encryption (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.

Required package: mongodb-client-encryption (via "mongodb-client-encryption")
Required by: mongodb@virtual:4aa8df445eee8963fd8c1f58ef19305d83825503b1218ced8747fba919196c60e8a0029dc817a11e9c3f061c3db32887f679974bfcd5f68685331fd0236da61f#npm:3.6.3 (via /home/anton/Projects/pnp-bug/.yarn/$$virtual/mongodb-virtual-1a6d487e1f/0/cache/mongodb-npm-3.6.3-3206384cb1-85a8064180.zip/node_modules/mongodb/lib/operations/)
Ancestor breaking the chain: mongoose@https://github.com/raphaelschwinger/mongoose.git#commit=734e82191feb2f9b51a946c5b2589f4f55ff61af


    512 │       let mongodbClientEncryption = require('mongodb-client-encryption');
        ╵                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~

 > pnp:/home/anton/Projects/pnp-bug/.yarn/$$virtual/mongodb-virtual-1a6d487e1f/0/cache/mongodb-npm-3.6.3-3206384cb1-85a8064180.zip/node_modules/mongodb/lib/core/auth/mongodb_aws.js: error: [pnp-plugin] mongodb tried to access aws4 (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.

Required package: aws4 (via "aws4")
Required by: mongodb@virtual:4aa8df445eee8963fd8c1f58ef19305d83825503b1218ced8747fba919196c60e8a0029dc817a11e9c3f061c3db32887f679974bfcd5f68685331fd0236da61f#npm:3.6.3 (via /home/anton/Projects/pnp-bug/.yarn/$$virtual/mongodb-virtual-1a6d487e1f/0/cache/mongodb-npm-3.6.3-3206384cb1-85a8064180.zip/node_modules/mongodb/lib/core/auth/)
Ancestor breaking the chain: mongoose@https://github.com/raphaelschwinger/mongoose.git#commit=734e82191feb2f9b51a946c5b2589f4f55ff61af

    12 │   aws4 = require('aws4');

I currently worked around it by defining mongodb-client-encryption and aws4 as externals for this plugin, but IMO this should be somehow handled by the plugin automatically. Maybe some check like is this dependency optional then just show a warning instead of throwing an error would be a solution.

Hope this helps.

@eigilsagafos
Copy link
Member

Thanks for reporting this! I'm planning to deprecate this plugin once the official yarn plugin and esbuild has better support for externals.

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

No branches or pull requests

2 participants