berry: [Bug?] Virtual paths cause duplicate module instantiation
- I’d be willing to implement a fix
Describe the bug
For Parcel , we have multiple modules that do this:
import {register} from "@parcel/core";
class X {}
register("X", X);
When installing Parcel via PnP, it seems like these modules are called multiple times (and register mustn’t be called multiple times - this works fine with Yarn 1).
I found out that the problematic file (@parcel/package-manager/lib/Npm.js
) is required & compiled via two different require chains, @parcel-package-manager-virtual-<TWO-DIFFERENT-IDS-HERE>
(see below).
I known this is problematic and somewhat relies on hoisting (and I already get some peerdependency warnings).
To Reproduce
😬
Example
Call chain 1
Trace: 2.0.0-alpha.3.2-dccf3d96:Npm
at registerSerializableClass (pnp/.yarn/unplugged/@parcel-core-npm-2.0.0-alpha.3.2-dccf3d96-27a2fe7d38/node_modules/@parcel/core/lib/serializer.js:27:13)
at Object.<anonymous> (pnp/.yarn/$$virtual/@parcel-package-manager-virtual-e6cacad87d/0/cache/@parcel-package-manager-npm-2.0.0-alpha.3.2-dccf3d96-3ccef4b8cf-2.zip/node_modules/@parcel/package-manager/lib/Npm.js:84:37)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.module_1.Module._load (pnp/.pnp.js:23984:14)
at Module.require (internal/modules/cjs/loader.js:1044:19)
at require (internal/modules/cjs/helpers.js:77:18)
at Object.<anonymous> (pnp/.yarn/$$virtual/@parcel-package-manager-virtual-e6cacad87d/0/cache/@parcel-package-manager-npm-2.0.0-alpha.3.2-dccf3d96-3ccef4b8cf-2.zip/node_modules/@parcel/package-manager/lib/index.js:19:12)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
Call chain 2
Trace: 2.0.0-alpha.3.2-dccf3d96:Npm
at registerSerializableClass (pnp/.yarn/unplugged/@parcel-core-npm-2.0.0-alpha.3.2-dccf3d96-27a2fe7d38/node_modules/@parcel/core/lib/serializer.js:27:13)
at Object.<anonymous> (pnp/.yarn/$$virtual/@parcel-package-manager-virtual-939cfbf528/0/cache/@parcel-package-manager-npm-2.0.0-alpha.3.2-dccf3d96-3ccef4b8cf-2.zip/node_modules/@parcel/package-manager/lib/Npm.js:84:37)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.module_1.Module._load (pnp/.pnp.js:23984:14)
at Module.require (internal/modules/cjs/loader.js:1044:19)
at require (internal/modules/cjs/helpers.js:77:18)
at Object.<anonymous> (pnp/.yarn/$$virtual/@parcel-package-manager-virtual-939cfbf528/0/cache/@parcel-package-manager-npm-2.0.0-alpha.3.2-dccf3d96-3ccef4b8cf-2.zip/node_modules/@parcel/package-manager/lib/index.js:19:12)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
Environment if relevant (please complete the following information):
- OS: macOS
- Node version: 12
- Yarn version: 2.0.0-rc.29
Additional context
Add any other context about the problem here.
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 15 (13 by maintainers)
Yep, I still need to look into it, there’s a missing deduplication (cf my previous comment). Probably fixable on our side, will report back once I have more info 👍