doczjs / docz

✍ It has never been so easy to document your things!
https://docz.site
MIT License
23.55k stars 1.45k forks source link

pnpm bare installs broken #1726

Closed waynevanson closed 2 years ago

waynevanson commented 2 years ago

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.

renatobenks commented 2 years ago

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!

waynevanson commented 2 years ago

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.