我无法正确安装 sql.js

I cannot install sql.js properly

提问人:mr.sun 提问时间:2/6/2023 更新时间:11/11/2023 访问量:329

问:

我正在尝试使用 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>

文件树

JavaScript 数据库 SQLite 客户端 SQL.js

评论

0赞 Phil 2/6/2023
require()是一个 NodeJS 构造。如果在客户端使用模块,则需要使用import
0赞 Quentin 2/6/2023
该文档包括与 Web 浏览器一起使用的说明。按照部分中所说的去做。
0赞 esqew 11/11/2023
重复浏览器:未捕获的 ReferenceError:未定义 require

答:

0赞 mr.sun 2/7/2023 #1

考虑到您的评论,我做了一些研究。我应该使用 the 而不是,因为我不需要使用“web-assembly”。然而,他们的示例代码中有我仍然不明白的代码。修改它而不是使用解决了我的问题。sql-asm.jssql-wasm.jssql-wasm.jsrequire()

<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>

-1赞 Rodrigo Sakae 11/11/2023 #2

“require”是指使用 Node。

当你使用原版JS时,你应该使用它,如github存储库中所述(第3行,注释)

const initSqlJs = window.initSqlJs;