Git Product home page Git Product logo

Comments (8)

karamalie avatar karamalie commented on May 27, 2024 7

Hi @leouzz @JeffWScott

document is not defined on the server, so you need to guard against that in your component so that particular piece of code is only run in the browser.

You can use the onMount function which is only run in the browser when the component has been rendered.

<script>
  import { onMount } from 'svelte';

  onMount(() => {
    // ...
  });
</script>

Sapper works well with most third-party libraries you are likely to come across. However, sometimes, a third-party library comes bundled in a way which allows it to work with multiple different module loaders. Sometimes, this code creates a dependency on window, such as checking for the existence of window.global might do.

Since there is no window in a server-side environment like Sapper's, the action of simply importing such a module can cause the import to fail, and terminate the Sapper's server with an error such as:

ReferenceError: window is not defined

The way to get around this is to use a dynamic import for your component, from within the onMount function (which is only called on the client), so that your import code is never called on the server.

Full working solution is provided below.

Player.svelte

<script>
	import { onMount } from 'svelte';

	let LottiePlayer;

	onMount(async () => {
		const module = await import('@lottiefiles/svelte-lottie-player');
		LottiePlayer = module.LottiePlayer;
	});

	let controlsLayout = [
		'previousFrame',
		'playpause',
		'stop',
		'nextFrame',
		'progress',
		'frame',
		'loop',
		'spacer',
		'background',
		'snapshot',
		'zoom',
		'info'
	];
</script>

{#if LottiePlayer}
	<LottiePlayer
		src="https://assets2.lottiefiles.com/packages/lf20_wxUJzo.json"
		autoplay={true}
		loop={true}
		controls={true}
		renderer="svg"
		background="transparent"
		height={600}
		width={600}
		{controlsLayout}
	/>
{/if}

You may then import this module into other svelte components as needed.

from svelte-lottie-player.

leouzz avatar leouzz commented on May 27, 2024

same problem here,
found a solution?

from svelte-lottie-player.

subhendupsingh avatar subhendupsingh commented on May 27, 2024

Tried above solution, still getting this error:

Uncaught (in promise) SyntaxError: The requested module '/node_modules/lottie-web/build/player/lottie.js?v=9bced667' does not provide an export named 'default'

from svelte-lottie-player.

karamalie avatar karamalie commented on May 27, 2024

LottiePlayer = module.LottiePlayer;
@subhendupsingh please try pulling the LottiePlayer module instead of default. could you perhaps post up a snippet of the code so we can test it out?

from svelte-lottie-player.

myhrmans avatar myhrmans commented on May 27, 2024

Facing the same issue here @karamalie.

From svelte.config.js:
vite: { optimizeDeps: { include: ["lottie-web"], } }

from svelte-kit route:

`

<script> ... let LottiePlayer; onMount(async () => { const module = await import('@lottiefiles/svelte-lottie-player'); LottiePlayer = module.LottiePlayer; }); ... </script>
{#if LottiePlayer}

<LottiePlayer
	src="background-fullscreen.json"
	autoplay={true}
	loop={true}
	controls={true}
	renderer="svg"
	background="transparent"
	height={600}
	width={600}
/>
{/if}

`

Get the following error:
node_modules/.pnpm/[email protected]/node_modules/lottie-web/build/player/lottie.js?v=5232e3af' does not provide an export named 'default'

Lottie-web installed as a dep.

from svelte-lottie-player.

sanjeevjayasurya avatar sanjeevjayasurya commented on May 27, 2024

I was going through the same error when I tried using the svelte-lottie-player along with sveltekit.
I used lottie-player provided by lottie-files themselves
Here's a link for reference:

https://lottiefiles.com/web-player

from svelte-lottie-player.

Nisthar avatar Nisthar commented on May 27, 2024

LottiePlayer = module.LottiePlayer; @subhendupsingh please try pulling the LottiePlayer module instead of default. could you perhaps post up a snippet of the code so we can test it out?

I think the error is with how the library pulls lottie-web

from svelte-lottie-player.

diegoulloao avatar diegoulloao commented on May 27, 2024

Still not fixed in 2024?

from svelte-lottie-player.

Related Issues (16)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.