pnpm bare installs broken
waynevanson opened this issue · comments
Bug Report
Describe the bug
Installing docz with pnpm is troublesome, with many errors coming from peer dependency issues.
The first is there is no entry point for gatsby. Expected behaviour is that it should be there, but it looks like it's trying to run it from the root project's node_modules file instead of docz's node_modules.
Gatsby is not peer dependency so it should be installed when docz is installed and accessed
To Reproduce
https://github.com/waynevanson/issue-docz-pnpm-compat/blob/main/package.json
Expected behavior
A clear and concise description of what you expected to happen..
Environment
Linux Ubuntu, Node ^16
{
"name": "pnpm-docz",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"devDependencies": {
"docz": "^2.4.0",
"typescript": "^4.6.3"
},
"dependencies": {
"react": "^17",
"react-dom": "^17"
}
}
Additional context/Screenshots
Add any other context about the problem here. If applicable, add screenshots to help explain.
Hey, thank you for opening this issue, we appreciate it! Just a quick introduction about how docz actually works underneath, we use gatsby behind the scenes to run and build your documentation output, but before doing it, we oversearch for your mdx files into your source folder (default /src
) to parse them into HTML through gatsby, but unfortunately, we still don't have any good workaround when any of these files are not found, which it currently results in a misconception error. So, it probably goes away once you start adding mdx files to your /src
folder. Try to do that and let us know if you're still struggling with gatsby building problems. I'll be closing it for now as we already have a specific issue to fix that!
Thanks for sharing how it works!
Unfortunately the problem persists even when there is an .mdx
file present in /src
.
$ pnpm exec docz dev
Building app
node:events:368
throw er; // Unhandled 'error' event
^
Error: spawn /home/wayne/code/issue-docz-pnpm-compat/node_modules/.bin/gatsby ENOENT
at Process.ChildProcess._handle.onexit (node:internal/child_process:282:19)
at onErrorNT (node:internal/child_process:477:16)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit (node:internal/child_process:288:12)
at onErrorNT (node:internal/child_process:477:16)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
errno: -2,
code: 'ENOENT',
syscall: 'spawn /home/wayne/code/issue-docz-pnpm-compat/node_modules/.bin/gatsby',
path: '/home/wayne/code/issue-docz-pnpm-compat/node_modules/.bin/gatsby',
spawnargs: [ 'develop', '--host', 'localhost', '--port', '3000' ]
}
I've tried to figure it out and so far it looks like it's due to non-flat node_modules folder.
Removing node_modules and running npm i
allows gatsby
to run.
https://pnpm.io/motivation#creating-a-non-flat-node_modules-directory
Adding node-linker=hoisted
to .npmrc
helps relieve that problem for pnpm
and mimics the behaviour expected by npm
.
Looking at Gastby docs, it seem it doesn't support pnpm
by default: https://www.gatsbyjs.com/docs/reference/gatsby-cli/#how-to-change-your-default-package-manager-for-your-next-project
This can be addressed with a webpack plugin: https://www.gatsbyjs.com/plugins/gatsby-plugin-pnpm/
Off topic of pnpm, I think an idea is to install dependencies into /.docz
to isolate the project, and symlink /src
to /.docz/src
for resolution rather than copying it.