PouchDB 和 SvelteKit

问题描述 投票:0回答:3

我想将 PouchDB 与 SvelteKit 一起使用。我已将 pouchdb-7.2.1.js 复制到 SvelteKit 中的

/src/lib
d 并将其重命名为 pouchdb.js。 Pouchdb 应该在浏览器中运行。因此我使用 ssr=false 来抑制服务器端渲染。我在导入语句中遇到第一个错误。这是我的第一个非常短的页面(couchdb.svelte):

<script context="module">
    export const ssr = false;
</script>

<script>
    import PouchDB from '$lib/pouchdb.js'; 
</script>

我收到错误 500

import not found: PouchDB

我尝试了很多不同的版本,但没有成功。例如:

import PouchDB from 'pouchdb-browser';  (After npm i pouchdb-browser)
import PouchDB from 'pouchdb';          (After npm i pouchdb)

pouchdb的正确使用方法是什么?

javascript couchdb svelte sveltekit pouchdb
3个回答
7
投票

这是通过脚本标签使用 PouchDB 的解决方法:

index.svelte:

<script>
    import { onMount } from 'svelte'

    // Ensure execution only on the browser, after the pouchdb script has loaded.
    onMount(async function() {
        var db = new PouchDB('my_database');
        console.log({PouchDB})
        console.log({db})
    });
</script>


<svelte:head>
    <script src="//cdn.jsdelivr.net/npm/[email protected]/dist/pouchdb.min.js"></script>
</svelte:head>

import
ed时,PouchDB似乎期望Svelte/Vite/Rollup不提供的某种环境。 (Svelte/Vite 最喜欢使用适当的 ESM 模块;PouchDB 似乎是一个转换为 JS 模块的“window.global”脚本。)

可能有一种方法可以修改配置来创建PouchDB期望的环境。我认为您必须修改 svelte.config.cjs 文件。 (具体来说,确定 rollup 配置的

vite 部分

您可能会在这个PouchDB + Angular相关问题中找到一些提示。

我只会使用上面的

<script>
解决方法。


1
投票

对于未来尝试将

pouchdb-browser
和/或
RxDB
与 sveltekit 集成的 Google 用户,这里是使用 vite 时“修复”浏览器中 pouchdb 环境的更改。

  1. <head>
     之前添加到您的 
    %svelte.head%
  2. 部分
<script>
    window.process = window.process || {env: {NODE_DEBUG:undefined, DEBUG:undefined}};
    window.global = window;
</script>
  1. svelte.config.js
    中将
    optimizeDeps
    添加到
    config.kit.vite.optimizeDeps
optimizeDeps: {
    allowNodeBuiltins: ['pouchdb-browser', 'pouchdb-utils', 'base64id', 'mime-types']
}

这是对我的应用程序进行这些更改的提交: https://github.com/TechplexEngineer/bionic-scouting/commit/d1c4a4dcdc7096ae40937501d97a7ef9ee10ab66

感谢: pouchdb/pouchdb#8266(评论)


0
投票

我已经和这个同样的问题作斗争有一段时间了。 我决定走另一条路。 这可能不正确,但它正在起作用。

我在 app.html 头部添加了两个脚本:

<head>
    <meta charset="utf-8" />
    <meta name="description" content="" />
    <link rel="icon" href="%svelte.assets%/favicon.png" />
    <meta name="viewport" content="width=device-width, initial- 
    scale=1" />
    <!-- Call the Pouchdb import -->
    <script type="text/javascript" src="../src/lib/pouchdb.js">
    </script>
    <!-- create new databases for use in the app -->
    <script>
        const user = new PouchDB('user');
    </script>
    %svelte.head%
</head>

然后在我想要使用数据库的任何组件中,我添加一个额外的脚本标签来定义变量“user”:

<script lang="ts" context="module">
    //Declare the database name so that it is recognized.
    declare const user;
</script>

<script lang="ts">
//Example use of database.
const addUser = () => {
    //Call the database by name established in app.html
    user.put({
        _id: 'someid',
        firstName: 'Jon',
        lastName: 'doe'
    });
};
</script>

这是我将 PouchDB 与 SvelteKit 结合使用的最简单方法。 所有其他解决方案都需要对配置文件进行重大修改、对环境变量进行更改以及对整个应用程序中的代码进行不必要的调整。 我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.