#### Meeting from: January 27th, 2021
# Open RFC Meeting (npm)
### Attendees
- Darcy Clarke (@darcyclarke)
- Christian Siebmanns (@christian24)
- Nathan LaFreniere (@nlf)
- Ruy Adorno (@ruyadorno)
- Isaac Z. Schlueter (isaacs)
- Wes Todd (@wesleytodd)
- Michael Garvin (@wraithgar)
- Rick Markins (@rxmarbles)
### Agenda
1. **Housekeeping**
1. Introduction(s)
1. [Code of Conduct Acknowledgement](https://www.npmjs.com/policies/conduct)
1. Announcements
1. **File Path Resolution Review:**
1. **Summary:**
* `file:` behaivour changed in v7 - no longer support installing dependencies of packages that are not nested
1. **Questions:**
* Do we agree with how it's working today?
* How would we change it?
1. **Related Items:**
* **Issue**: [#2145 [BUG] npm7 does not create transitive node_module folders for dependencies referenced via file:/](https://github.com/npm/cli/issues/2145)
1. **Workspaces Review:**
1. **Summary:**
* It's been brought up several times that the mental model we have today of "hoisting" dependencies should be re-examined as "sharing"; This aligns with some feedback/feature request we've already recieved to add `no-hoist` as a config to Workspaces. Reviewing & thinking critically about the behaivour of our existing strategy will help us lay a solid foundation/understanding before we start the next phase of work in this space.
1. **Questions:**
* Do we agree with how it's working today?
* How would we change it?
1. **Related Items:**
* **Issue**: [#2339 npm v7 does not install linked packages dependencies](https://github.com/npm/cli/issues/2339)
* **Issue**: [#301 [RRFC] Workspaces: support to version specifiers other than semver ranges](https://github.com/npm/rfcs/issues/301)
* **PR**: [#117 RFC: npm workspaces - Working with workspaces](https://github.com/npm/rfcs/pull/117)
### Notes
> Note: this is not a 1:1 notes of quotes, moreso paraphrased context/sentiment as close to as possible documented in realtime
1. **File Path Resolution Review**
* @isaacs we have options here in terms of making this more configurable
* @wesleytodd missing old behaivour of copying
* @isaacs may not want to resolve dependencies that already have lock file
* @wesleytodd has there ever been a consideration to link back to the consumer?
* @isaacs maybe we can treat a link target package-lock.json kind of like npm-shrinkwrap.json file?
* @isaacs might be able to say that we don't install linked dependencies but we have a great workspace experience
* @isaacs need an RFC on linked dependencies (referencing what we do/don't install & why)
* @isaacs then, review workspace implementation (ie. what should/shouldn't be shared)
* @wesleytodd like this because it punts this a bit
* @isaac action: will create the initial draft of the RFC outlining the current behaivour
1. **Workspaces Review:**
* @isaacs need the document of usecases, including the precursor drafted RFC from above
* @darcyclarke should we try to formulate some questions to be answered by these RFCs?
* **Questions:**
* Given a workspace within a project, for each of its dependencies, in which scenarios should that dependency be shared among all/some other workspaces within the project, in which should it reference a workspace within the project (if one exists), and in which should it be isolated from the other workspaces within the project?
* Leave aside any implementation approaches. We will figure out an optimal tree design once we have the set of behavioral design constraints established.
* Eg:
* `packages/a` depends on `b@1.x`. `packages/b` is v1.2.3. `require('b')` from within `packages/a` should refer to `packages/b`
* `packages/a` depends on `b@1.x`. `packages/b` is v2.3.4. `require('b')` from within `packages/a` should *not* refer to `packages/b`, because it is not a valid resolution.
* `packages/a` depends on `c@1.x`. `packages/b` depends on `c@1.x`. `require('c')` from within `packages/a` (should|should not) refer to the same thing as `require('c')` from within `packages/b`. (When should it? When should it not?)
* What configurations should impact the decision to share or isolate any given dep?
* Focus on behavior, not implementation.
1. **Import Maps**:
* @wesleytodd any interest in loaders/support for import maps
* ref. to originating issue: https://github.com/nodejs/modules/issues/477
* ref. to experimental loader project: https://github.com/node-loader/node-loader-import-maps
* would need an implementation to generate & then consume these import maps
* @darcyclarke can imagine we could help with generation, although it probably makes sense to try & ship import map consumption/support in node core
* @wesleytodd potentially, npm's support could help with standardization as that usually requires implementation
* @isaacs import maps may have a place in the story behind workspaces/linking dependencies
* @bnb good to note on how this works in regards to esm
* @bnb could help get away from `.js`