slidevjs / slidev

Presentation Slides for Developers
https://sli.dev
MIT License
32.94k stars 1.33k forks source link

Can not work without `shamefully-hoist` on pnpm #1257

Closed cdtut closed 8 months ago

cdtut commented 8 months ago

Describe the bug

dev

[vite] Internal server error: Failed to resolve import "vue" from "../../../node_modules/.pnpm/@slidev+client@0.46.3_postcss@8.4.33_typescript@5.3.3_vite@5.0.12/node_modules/@slidev/client/main.ts?v=7928d2f5". Does the file exist?`

build

[vite]: Rollup failed to resolve import "vue" from "../../../node_modules/.pnpm/@slidev+client@0.46.3_postcss@8.4.33_typescript@5.3.3_vite@5.0.12/node_modules/@slidev/client/main.ts".`
This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rollupOptions.external`

Is there workaround? We can't use pnpm hoisting please consider workaround or let it work without hoisting otherwise can't use it because project cant be outside our monorepo.

No reason for project to need hoisting this requirement should be removed.

To Reproduce Use pnpm and start slidev in package in monorepo.

antfu commented 8 months ago

If you don't enable hoist, then you need to install Vue and allow runtime deps explicitly on the top-level. I think there is something we could do to improve that. If so, PR welcome :)

cdtut commented 8 months ago

I installed Vue now getting [vite] Internal server error: Failed to resolve import "@unocss/reset/tailwind.css" from "../../../../../../@slidev/styles". Does the file exist?

Starting dev I get lots of lines like Failed to resolve dependency: @antfu/utils, present in 'optimizeDeps.include'

Can you tell me which deps to install manually? I can do PR for documentation.

allow runtime deps explicitly on the top-level

How to do this?

antfu commented 8 months ago

Bascially means you need to install @unocss/reset and @antfu/utils as well - and then try again, repeat that until you see no errors - in general turn on hoist would save you from this otherwise you need to hoist yourself

cdtut commented 8 months ago

What you meant by "allow runtime deps explicitly on the top-level"? Is that workaround to avoid all this until it is made in better way?

Failed to resolve dependency: @antfu/utils, present in 'optimizeDeps.include'
Failed to resolve dependency: @slidev/parser, present in 'optimizeDeps.include'
Failed to resolve dependency: @unhead/vue, present in 'optimizeDeps.include'
Failed to resolve dependency: @vueuse/math, present in 'optimizeDeps.include'
Failed to resolve dependency: @vueuse/motion, present in 'optimizeDeps.include'
Failed to resolve dependency: codemirror, present in 'optimizeDeps.include'
Failed to resolve dependency: defu, present in 'optimizeDeps.include'
Failed to resolve dependency: drauu, present in 'optimizeDeps.include'
Failed to resolve dependency: file-saver, present in 'optimizeDeps.include'
Failed to resolve dependency: fuse.js, present in 'optimizeDeps.include'
Failed to resolve dependency: js-base64, present in 'optimizeDeps.include'
Failed to resolve dependency: js-yaml, present in 'optimizeDeps.include'
Failed to resolve dependency: katex, present in 'optimizeDeps.include'
Failed to resolve dependency: monaco-editor, present in 'optimizeDeps.include'
Failed to resolve dependency: nanoid, present in 'optimizeDeps.include'
Failed to resolve dependency: recordrtc, present in 'optimizeDeps.include'
Failed to resolve dependency: resolve, present in 'optimizeDeps.include'
Failed to resolve dependency: vue-router, present in 'optimizeDeps.include'
Failed to resolve dependency: vue-starport, present in 'optimizeDeps.include'
Failed to resolve dependency: windicss, present in 'optimizeDeps.include'
Failed to resolve dependency: codemirror/mode/javascript/javascript, present in 'optimizeDeps.include'
Failed to resolve dependency: codemirror/mode/css/css, present in 'optimizeDeps.include'
Failed to resolve dependency: codemirror/mode/markdown/markdown, present in 'optimizeDeps.include'
Failed to resolve dependency: codemirror/mode/xml/xml, present in 'optimizeDeps.include'
Failed to resolve dependency: codemirror/mode/htmlmixed/htmlmixed, present in 'optimizeDeps.include'
Failed to resolve dependency: codemirror/addon/display/placeholder, present in 'optimizeDeps.include'
Failed to resolve dependency: mermaid/dist/mermaid.esm.min.mjs, present in 'optimizeDeps.include'
Failed to resolve dependency: mermaid/dist/mermaid.esm.mjs, present in 'optimizeDeps.include'
Failed to resolve dependency: vite-plugin-vue-server-ref/client, present in 'optimizeDeps.include'

I am not going to manually install all because it can change each version and it make no sense. Why is slidev so different than all other package that exist? I should only have to care about my dependencies not dependencies of my dependencies!

When I install @slidev/cli it should automatically bring everything it needs. Slidev should work out of box in easiest possible way so people have no problem and dont have to change the policies of monorepo just for one non critical tool. Want to use slidev please can you make it work without hoist?

antfu commented 8 months ago

I did list all necessary dependencies in the packages. However, you decided not to enable hoisted, making the deps lie under node_modules/@slidev/client/node_modules but not directly in node_modules, making Vite fail to resolve it. Again, I don't know any workaround I could have, if you do I am open to PRs to improve this situation

cdtut commented 8 months ago

I use lot of vite based products that have lot of dependencies but vite does not have problem to find those in sub directory. They dont need to enable hoisting they work in default way.

Why it works in every product but not slidev? If you can help me understand I can try think solution.

In repo/packages/project/slideproject/node_modules I only see .bin, .vite, @slidev (with cli under it) and playwright-chromium. @slidev/cli and playwright-chromium are the only 2 dependencies I set in package.json.

Shouldn't all dependencies of slidev be in repo/packages/project/slideproject/node_modules or repo/packages/project/slideproject/node_modules/@slidev/cli/node_modules (but there is only .bin there)?

cdtut commented 8 months ago

@antfu Issue closed as completed but commit does not fix it latest version has same problem. It work for you?