我正在尝试使用 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>
考虑到您的评论,我做了一些研究。我应该使用
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>
“require”是当你使用 Node 时。
当您使用 vanilla JS 时,您应该使用它,如 github 存储库中所解释的那样(第 3 行,已注释)
const initSqlJs = window.initSqlJs;