pngwn / prism-svelte

Svelte language extension for prismjs
65 stars 6 forks source link

Usage With Svelte Kit #11

Open stolinski opened 3 years ago

stolinski commented 3 years ago

I'm seeing

TypeError: Line must be greater than or equal to 1, got -1
    at BasicSourceMapConsumer.SourceMapConsumer_findMapping [as _findMapping] (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:68868:13)
    at BasicSourceMapConsumer.SourceMapConsumer_originalPositionFor [as originalPositionFor] (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:68937:22)
    at /Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:69883:34
    at String.replace (<anonymous>)
    at /Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:69873:21
    at Array.map (<anonymous>)
    at ssrRewriteStacktrace (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:69872:10)
    at Object.ssrFixStacktrace (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:70196:27)
    at Object.handle_error (file:///Users/scotttolinski/Sites/levelup/svelteui/node_modules/@sveltejs/kit/dist/chunks/index.js:3353:19)
    at respond$1 (file:///Users/scotttolinski/Sites/levelup/svelteui/node_modules/@sveltejs/kit/dist/ssr.js:998:11)

in the ui and on the server this

5:08:54 PM [vite] Error when evaluating SSR module /node_modules/prism-svelte/index.js:
ReferenceError: Prism is not defined
    at /node_modules/prism-svelte/index.js:3:1
    at instantiateModule (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:69982:166)
Prism is not defined
ReferenceError: Prism is not defined
    at /node_modules/prism-svelte/index.js:1:1
    at instantiateModule (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:69982:166)
Line must be greater than or equal to 1, got -1
TypeError: Line must be greater than or equal to 1, got -1
    at BasicSourceMapConsumer.SourceMapConsumer_findMapping [as _findMapping] (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:68868:13)
    at BasicSourceMapConsumer.SourceMapConsumer_originalPositionFor [as originalPositionFor] (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:68937:22)
    at /Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:69883:34
    at String.replace (<anonymous>)
    at /Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:69873:21
    at Array.map (<anonymous>)
    at ssrRewriteStacktrace (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:69872:10)
    at Object.ssrFixStacktrace (/Users/scotttolinski/Sites/levelup/svelteui/node_modules/vite/dist/node/chunks/dep-0ed4fbc0.js:70196:27)
    at Object.handle_error (file:///Users/scotttolinski/Sites/levelup/svelteui/node_modules/@sveltejs/kit/dist/chunks/index.js:3353:19)
    at respond$1 (file:///Users/scotttolinski/Sites/levelup/svelteui/node_modules/@sveltejs/kit/dist/ssr.js:998:11)
stolinski commented 3 years ago

Not sure why the formatting is off here, I can provide a reproduction, but it's basically just tossing the example code on to a server rendered page and refreshing.

pngwn commented 3 years ago

Weird, I'll take a look at this.

Do you know what specifically was being highlighted?

stolinski commented 3 years ago

It was mad at the import of 'prism-svelte'. Commenting that out and leaving just prism has no issues.

pngwn commented 3 years ago

Ah right. I'll take a look.

pngwn commented 3 years ago

I think this is specific to dev mode. I can reproduce in dev but the prod build seems to work fine. I think this is something to do with the way handles certain dependencies. Going to see if I can find a solution.

pngwn commented 3 years ago

This isn't specific to this package, it also causes Prism to fail in my tests. If I remove the import for prism-svelte and just try to highlight with Prism i get:

Cannot read property 'highlight' of undefined

I'm guessing this is because Prism is shipped as UMD and attaches itself to the global namespace. This clearly doesn't play nicely with how Vite is handling things in dev mode. WIll keep digging.

pngwn commented 3 years ago

The reason prism-svelte will throw an error even earlier than that is due to how new syntaxes are added to Prism, by modifying that global namepsace (which in this instance, does not exist).

pngwn commented 3 years ago

repro: https://github.com/pngwn/kit-prism-ssr-bug

pngwn commented 3 years ago

another repro, with only vite: https://github.com/pngwn/vite-prism-ssr-bug

benmccann commented 3 years ago

I'm having trouble as well while trying to migrate svelte.dev to SvelteKit. It seems not to like Prism global variable:

ReferenceError: Prism is not defined
    at /node_modules/prism-svelte/index.js:1:1

Any idea what I might need to do to define it?

My code is here: https://github.com/benmccann/svelte/tree/sveltekit. It may not run until https://github.com/sveltejs/svelte-repl/pull/170 is merged though

pngwn commented 3 years ago

This is a vite issue as far as I can tell. I have reproed only with vite and Prism. Only happens during SSR, so something to do with vite, SSR and the dev server. Only way I can make it go is by using global.Prism ton instantiate but that will break very quickly due to how prism adds grammars.

bluwy commented 3 years ago

Tried to repro this today and it works ootb for me. From the error logs, it looks like the packages weren't prebundled, but this shouldn't be the case now as SvelteKit enabled prebundling and vite-plugin-svelte handles them properly.

pngwn commented 2 years ago

@stolinski Is this bug still present or did the vite changes mentioned above fix this issue?

benmccann commented 2 years ago

I haven't had any issues with the latest versions

pelletier197 commented 2 years ago

I just faced the same issue and found that I could fix it by adding prism-svelte to the noExternal deps in vite.

// svelte.config.js
import preprocess from 'svelte-preprocess'
import adapter from '@sveltejs/adapter-static'

export default {
  preprocess: [preprocess()],
  kit: {
    adapter: adapter(),
    prerender: {
      default: true,
    },
    vite: {
      ssr: {
        noExternal: ['prismjs', 'prism-svelte'],
      },
    },
  },
}