- Add a Workspace class (subclass of Node) in Arborist
- all packages in workspace get symlinked to workspace ./node_modules
- app packages in ws get deps symlinked to ws ./node_modules if present
- deps are hoisted, possibly to ws root, and if so, symlinked to
package/nm
- nested workspaces get the ws deps from ws parent if possible
- if a package is a part of 2 workspaces simultaneously, it's a footgun
(or is it?) -- ok to just skip any nested workspace packages that are
already included in a root workspace, and vice versa. churn is not so
bad, and unavoidable.
- Proposed restriction: workspace packages must be contained by workspace
folder
.
├── .package.json.swp
├── .README.md.swp
├── apps
│ ├── x
│ │ └── node_modules
│ │ ├── bar -> ../../../node_modules/bar
│ │ ├── baz -> ../../../node_modules/baz
│ │ └── foo -> ../../../node_modules/foo
│ ├── y
│ │ └── node_modules
│ │ ├── bar -> ../../../node_modules/bar
│ │ ├── baz -> ../../../node_modules/baz
│ │ └── foo -> ../../../node_modules/foo
│ └── z
│ └── node_modules
│ ├── bar -> ../../../node_modules/bar
│ ├── baz -> ../../../node_modules/baz
│ └── foo -> ../../../node_modules/foo
├── node_modules
│ ├── bar -> ../packages/bar
│ ├── baz -> ../packages/baz
│ ├── foo -> ../packages/foo
│ ├── x -> ../apps/x
│ ├── y -> ../apps/y
│ └── z -> ../apps/z
├── package.json
├── packages
│ ├── bar
│ │ └── node_modules
│ │ ├── baz -> ../../../node_modules/baz
│ │ └── foo -> ../../../node_modules/foo
│ ├── baz
│ │ └── node_modules
│ │ ├── bar -> ../../../node_modules/bar
│ │ └── foo -> ../../../node_modules/foo
│ └── foo
│ └── node_modules
│ ├── bar -> ../../../node_modules/bar
│ └── baz -> ../../../node_modules/baz
├── plugins
│ ├── .package.json.swp
│ ├── a
│ │ └── node_modules
│ │ ├── baz -> ../../node_modules/baz
│ │ └── foo -> ../../node_modules/foo
│ ├── b
│ │ └── node_modules
│ │ ├── baz -> ../../node_modules/baz
│ │ └── foo -> ../../node_modules/foo
│ ├── c
│ │ └── node_modules
│ │ ├── baz -> ../../node_modules/baz
│ │ └── foo -> ../../node_modules/foo
│ ├── d
│ │ └── node_modules
│ │ ├── baz -> ../../node_modules/baz
│ │ └── foo -> ../../node_modules/foo
│ ├── node_modules
│ │ ├── baz -> ../../node_modules/baz
│ │ └── foo -> ../../node_modules/foo
│ └── package.json
├── README.md
└── ws2
├── apps
│ └── twoapp
│ └── node_modules
│ └── two -> ../../../node_modules/two
├── node_modules
│ ├── bar -> ../../node_modules/bar
│ ├── big-external-dep
│ ├── two -> ../packages/two
│ └── twoapp -> ../apps/twoapp
├── package.json
└── packages
└── two
└── node_modules
├── bar -> ../../../node_modules/bar
└── big-external-dep -> ../../../node_modules/big-external-dep