FormidableLabs / inspectpack

An inspection tool for Webpack frontend JavaScript bundles.
MIT License
592 stars 20 forks source link

Scenario / test fixture: Yarn PnP #86

Open ryan-roemer opened 5 years ago

ryan-roemer commented 5 years ago

https://github.com/yarnpkg/pnp-sample-app

Should work like existing multiple-roots scenario.

Tasks:

arcanis commented 5 years ago

If I understand multiple-roots well it consists in running yarn install in three different folders and running Webpack, is that correct? If so, then it doesn't seem the best fit for PnP 🙂

PnP needs (by design) to know everything about the dependency tree. When a file makes a require call, PnP will be able to finds which package that makes the require based on its path on the filesystem (this part can be made with multiple roots) and then deduces the dependencies for this package. This part cannot work with multiple roots, because there would be no way for us to know to which versions have the dependencies been locked.

ryan-roemer commented 5 years ago

@arcanis -- the multiple-roots scenario is meant to approximate what happens with monorepos that also directly create webpack bundles. Inspectpack doesn't specifically "handle" multiple roots, it just infers roots from the full paths of included assets that could potentially be a root.

You know, I haven't had a chance to kick the tires on PnP. I'll do that when I get a moment, but if you have a second, what does the on-disk layout look like for a simple install (like say two dependencies or something)? (Doesn't really matter if the root is in or outside of where the webpack build is...)

arcanis commented 5 years ago

the multiple-roots scenario is meant to approximate what happens with monorepos that also directly create webpack bundles. Inspectpack doesn't specifically "handle" multiple roots,

I see - I guess you'd want to use workspaces then! This way the two packages will become part of the dependency tree and all will be well 🙂

what does the on-disk layout look like for a simple install (like say two dependencies or something)?

On-disk it will look like this:

/home/arcanis/.local/yarn/cache/v3/package-a-1.0.0/node_modules/package-a/package.json
/home/arcanis/.local/yarn/cache/v3/package-b-1.0.0/node_modules/package-b/package.json
/home/arcanis/project/package.json
/home/arcanis/project/.pnp.js

And the content of .pnp.js will be similar to this, semantically:

"/home/arcanis/.local/yarn/cache/v3/package-a-1.0.0/node_modules/package-a" is package-a@1.0.0
"/home/arcanis/.local/yarn/cache/v3/package-a-1.0.0/node_modules/package-b" is package-b@1.0.0

the top-level project depends on package-a@1.0.0
package-a@1.0.0 depends on package-b@1.0.0

Doesn't really matter if the root is in or outside of where the webpack build is...

Fwiw the cache is by default outside (so as to be mutualized across multiple projects), but that can be configured.

ryan-roemer commented 5 years ago

I pulled https://github.com/yarnpkg/pnp-sample-app, then did this:

diff --git a/package.json b/package.json
index e390cfb..c15872c 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,7 @@
         "gulp-uglify": "^3.0.0",
         "html-webpack-plugin": "^3.1.0",
         "http-server": "^0.11.1",
+        "inspectpack": "^4.0.0",
         "jest": "^23.4.0",
         "jest-environment-jsdom": "^23.4.0",
         "jest-pnp-resolver": "^1.0.0",
diff --git a/webpack.config.js b/webpack.config.js
index 817095e..e3f9b5e 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,6 +1,7 @@
 const HtmlWebpackPlugin = require(`html-webpack-plugin`);
 const PnpWebpackPlugin = require(`pnp-webpack-plugin`);
 const WebpackAnalyzerPlugin = require(`webpack-bundle-analyzer`).BundleAnalyzerPlugin;
+const { DuplicatesPlugin } =  require(`inspectpack/plugin`);

 module.exports = {

@@ -12,6 +13,7 @@ module.exports = {

     output: {
         filename: `[name].js`,
+        pathinfo: true,
     },

@@ -38,6 +40,7 @@ module.exports = {

     plugins: [
         new HtmlWebpackPlugin(),
+        new DuplicatesPlugin(),
 //      new WebpackAnalyzerPlugin(),
     ]

(added pathinfo just to see where stuff is) and got this report:

Duplicate Sources / Packages - No duplicates found. 🚀

I added some console.logs to inspectpack's source to see what it inferred as the roots and got:

TODO HERE pkgRoots [
  "/Users/rye/Library/Caches/Yarn/v3/npm-babel-loader-7.1.4-e3463938bd4e6d55d1c174c5485d406a188ed015",
  "/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe",
  "/Users/rye/Library/Caches/Yarn/v3/npm-core-decorators-0.20.0-605896624053af8c28efbe735c25a301a61c65c5",
  "/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b",
  "/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db",
  "/Users/rye/Library/Caches/Yarn/v3/npm-object-assign-4.1.1-2109adc7965887cfc05cbbd442cac8bfbb360863",
  "/Users/rye/Library/Caches/Yarn/v3/npm-react-16.3.2-fdc8420398533a1e58872f59091b272ce2f91ea9",
  "/Users/rye/Library/Caches/Yarn/v3/npm-react-dom-16.3.2-cb90f107e09536d683d84ed5d4888e9640e0e4df",
  "/Users/rye/Library/Caches/Yarn/v3/npm-regenerator-runtime-0.11.1-be05ad7f9bf7d22e056f9726cee5017fbf19e2e9",
  "/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045",
  "/Users/rye/Library/Caches/Yarn/v3/npm-webpack-4.6.0-363eafa733710eb0ed28c512b2b9b9f5fb01e69b"
]

Does that roughly seem expected for a webpack build?

Sample layout

For my notes, here's what I found on disk with:

$ cat dist/app.js | egrep "^  \!\*\*\* " | egrep -o "\/[^ ]*" | sort
Collapsed large list 'o module paths in bundle

/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/core-js/object/create.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/core-js/object/define-property.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/core-js/object/get-prototype-of.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/core-js/object/set-prototype-of.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/core-js/symbol.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/core-js/symbol/iterator.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/helpers/classCallCheck.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/helpers/createClass.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/helpers/inherits.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/helpers/possibleConstructorReturn.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/helpers/typeof.js
/Users/rye/Library/Caches/Yarn/v3/npm-babel-runtime-6.26.0-965c7058668e82b55d7bfe04ff2337bc8b5647fe/node_modules/babel-runtime/regenerator/index.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-decorators-0.20.0-605896624053af8c28efbe735c25a301a61c65c5/node_modules/core-decorators/es/core-decorators.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/fn/object/create.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/fn/object/define-property.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/fn/object/get-own-property-descriptor.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/fn/object/get-prototype-of.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/fn/object/set-prototype-of.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/fn/symbol/index.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/fn/symbol/iterator.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_a-function.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_add-to-unscopables.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_an-object.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_array-includes.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_cof.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_core.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_ctx.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_defined.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_descriptors.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_dom-create.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_enum-bug-keys.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_enum-keys.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_export.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_fails.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_global.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_has.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_hide.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_html.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_ie8-dom-define.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_iobject.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_is-array.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_is-object.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_iter-create.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_iter-define.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_iter-step.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_iterators.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_library.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_meta.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-create.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-dp.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-dps.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-gopd.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-gopn-ext.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-gopn.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-gops.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-gpo.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-keys-internal.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-keys.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-pie.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_object-sap.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_property-desc.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_redefine.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_set-proto.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_set-to-string-tag.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_shared-key.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_shared.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_string-at.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_to-absolute-index.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_to-integer.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_to-iobject.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_to-length.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_to-object.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_to-primitive.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_uid.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_wks-define.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_wks-ext.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/_wks.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.array.iterator.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.object.create.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.object.define-property.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.object.get-prototype-of.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.object.set-prototype-of.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.object.to-string.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.string.iterator.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es6.symbol.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es7.symbol.async-iterator.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/es7.symbol.observable.js
/Users/rye/Library/Caches/Yarn/v3/npm-core-js-2.5.5-b14dde936c640c0579a6b50cabcc132dd6127e3b/node_modules/core-js/library/modules/web.dom.iterable.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/ExecutionEnvironment.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/containsNode.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/emptyFunction.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/emptyObject.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/getActiveElement.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/invariant.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/isNode.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/isTextNode.js
/Users/rye/Library/Caches/Yarn/v3/npm-fbjs-0.8.16-5e67432f550dc41b572bf55847b8aca64e5337db/node_modules/fbjs/lib/shallowEqual.js
/Users/rye/Library/Caches/Yarn/v3/npm-object-assign-4.1.1-2109adc7965887cfc05cbbd442cac8bfbb360863/node_modules/object-assign/index.js
/Users/rye/Library/Caches/Yarn/v3/npm-react-16.3.2-fdc8420398533a1e58872f59091b272ce2f91ea9/node_modules/react/cjs/react.production.min.js
/Users/rye/Library/Caches/Yarn/v3/npm-react-16.3.2-fdc8420398533a1e58872f59091b272ce2f91ea9/node_modules/react/index.js
/Users/rye/Library/Caches/Yarn/v3/npm-react-dom-16.3.2-cb90f107e09536d683d84ed5d4888e9640e0e4df/node_modules/react-dom/cjs/react-dom.production.min.js
/Users/rye/Library/Caches/Yarn/v3/npm-react-dom-16.3.2-cb90f107e09536d683d84ed5d4888e9640e0e4df/node_modules/react-dom/index.js
/Users/rye/Library/Caches/Yarn/v3/npm-regenerator-runtime-0.11.1-be05ad7f9bf7d22e056f9726cee5017fbf19e2e9/node_modules/regenerator-runtime/runtime-module.js
/Users/rye/Library/Caches/Yarn/v3/npm-regenerator-runtime-0.11.1-be05ad7f9bf7d22e056f9726cee5017fbf19e2e9/node_modules/regenerator-runtime/runtime.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/Notification.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/Observable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/Observer.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/Subscriber.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/Subscription.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/observable/ArrayLikeObservable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/observable/ArrayObservable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/observable/EmptyObservable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/observable/FromObservable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/observable/IteratorObservable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/observable/PromiseObservable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/observable/ScalarObservable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/observable/from.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/operators/observeOn.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/symbol/iterator.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/symbol/observable.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/symbol/rxSubscriber.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/UnsubscriptionError.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/errorObject.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/isArray.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/isArrayLike.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/isFunction.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/isObject.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/isPromise.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/isScheduler.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/noop.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/pipe.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/root.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/toSubscriber.js
/Users/rye/Library/Caches/Yarn/v3/npm-rxjs-5.5.10-fde02d7a614f6c8683d0d1957827f492e09db045/node_modules/rxjs/util/tryCatch.js
/buildin/global.js
/sources/fibonacci.js
/sources/index.js
arcanis commented 5 years ago

Yep, all that seems about right 👍

ryan-roemer commented 5 years ago

Thanks for the comments and tips! And super looking forward to diving in and trying out PnP as a consumer on projects!!!

All in all, my intuition at a high level for this issue is that:

  1. My hunch is that inspectpack (CLI and webpack plugin) will work just fine with PnP's approach (it really should for anything with node_modules in the source path, whether in one root location or multiply across disk).
  2. From the info above in this ticket, I'll be able to create a reasonable approximation for a PnP test fixture, just won't be able to create one that has duplicates from identical packages because that can't happen by design 😛