我无法正确安装sql.js

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

我正在尝试使用 sql.js 和 vanilla js 在客户端创建一个数据库。我猜想,安装过程中出现了一些问题。我已经完成了“npm install sql.js”并包含了 CDN。我从控制台收到此错误“Uncaught ReferenceError: require is not Defined

(顺便说一句,这是我的第一个问题,欢迎建议......)

这几乎是他们网站上的文档中显示的表达方式。但我无法让它发挥作用。是因为node.js还是其他原因?

<script type="module">
            const initSqlJs = require('/sql.js');

            const SQL = await initSqlJs({
                locateFile: (file) =>
                    'https://cdnjs.cloudflare.com/ajax/libs/sql.js/1.8.0/sql-wasm.js',
            });
            const db = new SQL.Database();

            let sqlstr =
                "CREATE TABLE hello (a int, b char); \
            INSERT INTO hello VALUES (0, 'hello'); \
            INSERT INTO hello VALUES (1, 'world');";
            db.run(sqlstr);
</script>

file tree

javascript database sqlite client-side sql.js
2个回答
0
投票

考虑到您的评论,我做了一些研究。我应该使用

sql-asm.js
而不是
sql-wasm.js
,因为我不需要使用“网络组件”。然而,他们的示例代码中有
sql-wasm.js
,我仍然不明白。修改这个而不使用
require()
解决了我的问题。

<meta charset="utf8" />
<html>
    <script src="node_modules/sql.js/dist/sql-asm.js"></script>
    <script>
        config = {
            locateFile: (filename) => `/dist/${filename}`,
        };
        // The `initSqlJs` function is globally provided by all of the main dist files if loaded in the browser.
        // We must specify this locateFile function if we are loading a wasm file from anywhere other than the current html page's folder.
        initSqlJs(config).then(function (SQL) {
            //Create the database
            const db = new SQL.Database();
            // Run a query without reading the results
            db.run('CREATE TABLE test (col1, col2);');
            // Insert two rows: (1,111) and (2,222)
            db.run('INSERT INTO test VALUES (?,?), (?,?)', [1, 111, 2, 222]);

            // Prepare a statement
            const stmt = db.prepare(
                'SELECT * FROM test WHERE col1 BETWEEN $start AND $end'
            );
            stmt.getAsObject({ $start: 1, $end: 1 }); // {col1:1, col2:111}

            // Bind new values
            stmt.bind({ $start: 1, $end: 2 });
            while (stmt.step()) {
                //
                const row = stmt.getAsObject();
                console.log('Here is a row: ' + JSON.stringify(row));
            }
        });
    </script>
    <body>
        Output is in Javascript console
    </body>
</html>


0
投票

“require”是当你使用 Node 时。

当您使用 vanilla JS 时,您应该使用它,如 github 存储库中所解释的那样(第 3 行,已注释)

const initSqlJs = window.initSqlJs;

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