parcel-bundler / parcel

The zero configuration build tool for the web. 📦🚀
https://parceljs.org
MIT License
43.41k stars 2.26k forks source link

Unsatisfied peer dependencies for @parcel/types (Yarn 3) #6727

Open mischnic opened 3 years ago

mischnic commented 3 years ago

🐛 bug report

➤ YN0002: │ @parcel/types@npm:2.0.0-nightly.801 doesn't provide @parcel/core (pc2788), requested by @parcel/workers
➤ YN0002: │ @parcel/types@npm:2.0.0-nightly.801 doesn't provide @parcel/core (p74bd1), requested by @parcel/fs
➤ YN0002: │ @parcel/types@npm:2.0.0-nightly.801 doesn't provide @parcel/core (p035e1), requested by @parcel/cache
➤ YN0002: │ @parcel/types@npm:2.0.0-nightly.801 doesn't provide @parcel/core (paa4f0), requested by @parcel/package-manager

😯 Current Behavior

These four packages have a peer dependency on core (to register with the serializer) and are direct dependencies of @parcel/types, which has neither a normal nor peer dependency on @parcel/core.

💻 Code Sample

mkdir test && cd test
yarn set version berry
yarn add parcel@nightly

🌍 Your Environment

Software Version(s)
Parcel 2.0.0-nightly.801
Yarn 3
JaredSartin commented 2 years ago

Any workaround or is this going to be fixed soon?

JaredSartin commented 2 years ago

Current "workaround" is to provide this info yourself in the .yarnrc.yml:

packageExtensions:
  "@parcel/bundler-default@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/compressor-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/config-default@*":
    peerDependencies:
      assert: "*"
      browserify-zlib: "*"
      buffer: "*"
      console-browserify: "*"
      constants-browserify: "*"
      crypto-browserify: "*"
      domain-browser: "*"
      events: "*"
      https-browserify: "*"
      os-browserify: "*"
      path-browserify: "*"
      process: "*"
      punycode: "*"
      querystring-es3: "*"
      stream-browserify: "*"
      stream-http: "*"
      string_decoder: "*"
      timers-browserify: "*"
      tty-browserify: "*"
      url: "*"
      util: "*"
      vm-browserify: "*"
  "@parcel/namer-default@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-cssnano@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-htmlnano@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-image@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-svgo@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-terser@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-css@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-html@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-js@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-svg@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/plugin@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/reporter-cli@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/reporter-dev-server@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/resolver-default@*":
    peerDependencies:
      "@parcel/core": "*"
      assert: "*"
      browserify-zlib: "*"
      buffer: "*"
      console-browserify: "*"
      constants-browserify: "*"
      crypto-browserify: "*"
      domain-browser: "*"
      events: "*"
      https-browserify: "*"
      os-browserify: "*"
      path-browserify: "*"
      process: "*"
      punycode: "*"
      querystring-es3: "*"
      stream-browserify: "*"
      stream-http: "*"
      string_decoder: "*"
      timers-browserify: "*"
      tty-browserify: "*"
      url: "*"
      util: "*"
      vm-browserify: "*"
  "@parcel/resolver-glob@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-browser-hmr@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-js@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-react-refresh@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-service-worker@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-babel@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-css@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-html@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-image@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-js@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-json@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-postcss@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-posthtml@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-react-refresh-wrap@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-sass@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-svg@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/types@*":
    peerDependencies:
      "@parcel/core": "*"
  parcel@*:
    peerDependencies:
      assert: "*"
      browserify-zlib: "*"
      buffer: "*"
      console-browserify: "*"
      constants-browserify: "*"
      crypto-browserify: "*"
      domain-browser: "*"
      events: "*"
      https-browserify: "*"
      os-browserify: "*"
      path-browserify: "*"
      process: "*"
      punycode: "*"
      querystring-es3: "*"
      stream-browserify: "*"
      stream-http: "*"
      string_decoder: "*"
      timers-browserify: "*"
      tty-browserify: "*"
      url: "*"
      util: "*"
      vm-browserify: "*"
JaredSartin commented 2 years ago

@mischnic Updated the comment above - my CI machine now builds on a Yarn 3, No-Install setup. I believe the fix would be to move all the dependencies to be peer dependencies for each of the parcel packages listed above. With my current project, I don't have time to properly create such a PR.

merceyz commented 2 years ago

The extensions related to builtin Node modules look a lot like Webpack fallbacks that aren't pre-resolved

JaredSartin commented 2 years ago

Yep, which webpack just got rid of - probably best to not shim in 2021...

schlomo commented 2 years ago

Any news on this? It would be nice if this could be solved within parcel so that us users don't have to add a lot of parcel related configuration to our environment (parcel was once sold as "no configuration required" tool 😄 ).

aspiers commented 1 year ago

Thanks a lot @JaredSartin for the tip. The exact block you provided created more warnings for me - probably parcel's internal dependencies have changed since you wrote that. But it gave me enough of a clue to come up with my own version which silenced all the warnings - pasted below. However it's a real pain that this doesn't work out of the box. This was reported in August 2021.

packageExtensions:
  parcel@*:
    peerDependencies:
      assert: "*"
      browserify-zlib: "*"
      buffer: "*"
      console-browserify: "*"
      constants-browserify: "*"
      crypto-browserify: "*"
      domain-browser: "*"
      events: "*"
      https-browserify: "*"
      os-browserify: "*"
      path-browserify: "*"
      process: "*"
      punycode: "*"
      querystring-es3: "*"
      stream-browserify: "*"
      stream-http: "*"
      string_decoder: "*"
      timers-browserify: "*"
      tty-browserify: "*"
      url: "*"
      util: "*"
      vm-browserify: "*"
  "@parcel/bundler-default@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/compressor-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/config-default@*":
    peerDependencies:
      "assert": "*"
      "browserify-zlib": "*"
      "buffer": "*"
      "console-browserify": "*"
      "constants-browserify": "*"
      "crypto-browserify": "*"
      "domain-browser": "*"
      "events": "*"
      "https-browserify": "*"
      "os-browserify": "*"
      "path-browserify": "*"
      "process": "*"
      "punycode": "*"
      "querystring-es3": "*"
      "stream-browserify": "*"
      "stream-http": "*"
      "string_decoder": "*"
      "timers-browserify": "*"
      "tty-browserify": "*"
      "url": "*"
      "util": "*"
      "vm-browserify": "*"
  "@parcel/config-webextension@*":
    peerDependencies:
      "assert": "*"
      "browserify-zlib": "*"
      "buffer": "*"
      "console-browserify": "*"
      "constants-browserify": "*"
      "crypto-browserify": "*"
      "domain-browser": "*"
      "events": "*"
      "https-browserify": "*"
      "os-browserify": "*"
      "path-browserify": "*"
      "process": "*"
      "punycode": "*"
      "querystring-es3": "*"
      "stream-browserify": "*"
      "stream-http": "*"
      "string_decoder": "*"
      "timers-browserify": "*"
      "tty-browserify": "*"
      "url": "*"
      "util": "*"
      "vm-browserify": "*"
  "@parcel/namer-default@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-css@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-htmlnano@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-image@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-svgo@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/optimizer-terser@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-css@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-html@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-js@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-svg@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/packager-webextension@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/plugin@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/reporter-cli@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/reporter-dev-server@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/resolver-default@*":
    peerDependencies:
      "@parcel/core": "*"
      assert: "*"
      browserify-zlib: "*"
      buffer: "*"
      console-browserify: "*"
      constants-browserify: "*"
      crypto-browserify: "*"
      domain-browser: "*"
      events: "*"
      https-browserify: "*"
      os-browserify: "*"
      path-browserify: "*"
      process: "*"
      punycode: "*"
      querystring-es3: "*"
      stream-browserify: "*"
      stream-http: "*"
      string_decoder: "*"
      timers-browserify: "*"
      tty-browserify: "*"
      url: "*"
      util: "*"
      vm-browserify: "*"
  "@parcel/runtime-browser-hmr@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-js@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-react-refresh@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-service-worker@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/runtime-webextension@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-babel@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-css@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-html@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-json@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-postcss@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-posthtml@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-raw@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-react-refresh-wrap@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-svg@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/transformer-webextension@*":
    peerDependencies:
      "@parcel/core": "*"
  "@parcel/types@*":
    peerDependencies:
      "@parcel/core": "*"
mischnic commented 1 year ago

The node polyfills issue from above should be fixed already.

@parcel/types is never loaded at runtime, it's only used by TypeScript or Flow.

Does anyone know how type-only TypeScript packages (like @types/*) handle the case where they reexport types from another package that has a peerDependency? Maybe we should just remove these dependencies completely