heroku - Sapper App 在heroku 中找不到模块'svelte/'internal',但在本地cli 中可以找到
问题描述
我有一个在本地开发和部署中运行良好的 Svelte/Sapper 应用程序。现在我想将它部署在 Heroku 上,它仍然可以在本地运行良好heroku local web
。但是在heroku中它没有启动。构建部分进展顺利,npm start
但Error: Cannot find module 'svelte/internal'
在internal/modules/cjs/loader.js:883
. 该文件似乎来自@vime/svelte
,当我删除依赖项和所有 vime 组件时,它启动时没有错误。但是由于它适用于本地部署,heroku local web
我想知道是否可以更改配置中的某些内容以使其在 Heroku 上运行?
解决方案
解决了。我使用了错误的方式来导入和使用非 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中所建议的那样。
所以我最好之前更仔细地阅读文档。
推荐阅读
- symfony - DateTimePicker 和 Datatransformer,表单渲染不考虑字符串
- python - 如何将值列表中的多个项目输入电子表格
- docker - 关于 docker ENTRYPOINT 的困惑
- flutter - Flutter:缩放和平移小部件
- nlp - 从子词令牌编码中获取词级编码
- php - PHP 使用 CSV 文件中的索引创建嵌套数组
- json - Scala Play:如何将 JSON 数组结构映射到案例类
- css - 如何让 Animate.css 与 Tailwind 的 @responsive 指令一起使用?
- asp.net-core - .net 核心并行电子邮件发送
- python - 如果删除不需要的 Python3 核心模块,未来的第 3 方包可能会出现什么问题