首页 > 解决方案 > Sapper App 在heroku 中找不到模块'svelte/'internal',但在本地cli 中可以找到

问题描述

我有一个在本地开发和部署中运行良好的 Svelte/Sapper 应用程序。现在我想将它部署在 Heroku 上,它仍然可以在本地运行良好heroku local web。但是在heroku中它没有启动。构建部分进展顺利,npm startError: Cannot find module 'svelte/internal'internal/modules/cjs/loader.js:883. 该文件似乎来自@vime/svelte,当我删除依赖项和所有 vime 组件时,它启动时没有错误。但是由于它适用于本地部署,heroku local web我想知道是否可以更改配置中的某些内容以使其在 Heroku 上运行?

错误日志来自heroku logs --tail

标签: herokusapper

解决方案


解决了。我使用了错误的方式来导入和使用非 ssr 组件。所以我改变了我对 vime 的使用

<script>
    import { Player, Youtube, DefaultUi } from '@vime/svelte';

    export let data;
</script>

{#if (process.browser) }
   <Player>
      <Youtube videoId="{data}" />
      <DefaultUi />
   </Player>
{/if}

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

    let Player
    let Youtube
    let DefaultUi

    onMount(async () => {
        const vime = await import('@vime/svelte');
        Player = vime.Player;
        Youtube = vime.Youtube;
        DefaultUi = vime.DefaultUi;
    });

    export let data;
</script>


<svelte:component this={Player}>
   <svelte:component this={Youtube} videoId="{data}" />
   <svelte:component this={DefaultUi}  />
</svelte:component>

正如https://sapper.svelte.dev/docs#Third-party_libraries_that_depend_on_window中所建议的那样。

所以我最好之前更仔细地阅读文档。


推荐阅读