电子和续集错误:不支持方言sqlite [英] Electron and sequelize error: the dialect sqlite is not supported
问题描述
我正在尝试将 sequelize 和sqlite与电子,但通过 npm start
(运行 node_modules / .bin / electron。
):
I'm trying to use sequelize and sqlite with electron in a desktop application but get the following error when running the app via npm start
(which runs node_modules/.bin/electron .
):
未捕获的错误:不支持方言sqlite。 (错误:请手动安装sqlite3软件包)
Uncaught Error: The dialect sqlite is not supported. (Error: Please install sqlite3 package manually)
我已经安装了sequelize和sqlite,安装了 npm-保存续集sqlite
。当我直接通过 node models.js
运行模型文件时,一切正常:
I've installed sequelize and sqlite with npm install --save sequelize sqlite
. When I run the models file directly via node models.js
, everything works fine:
$ node models.js
Executing (default): CREATE TABLE IF NOT EXISTS `Users` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `username` VARCHAR(255), `birthday` DATETIME, `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
Executing (default): PRAGMA INDEX_LIST(`Users`)
Executing (default): INSERT INTO `Users` (`id`,`username`,`birthday`,`updatedAt`,`createdAt`) VALUES (NULL,'janedoe','1980-07-19 22:00:00.000 +00:00','2015-09-06 11:18:52.412 +00:00','2015-09-06 11:18:52.412 +00:00');
{ id: 1,
username: 'janedoe',
birthday: Sun Jul 20 1980 00:00:00 GMT+0200 (CEST),
updatedAt: Sun Sep 06 2015 13:18:52 GMT+0200 (CEST),
createdAt: Sun Sep 06 2015 13:18:52 GMT+0200 (CEST) }
因此,该问题特定于使用电子续集。所有文件如下所示。
So the problem is specific to using sequelize with electron. All files are shown below.
package.json
{
"name": "example",
"version": "0.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node_modules/.bin/electron .",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"devDependencies": {
"electron-prebuilt": "^0.31.1"
},
"dependencies": {
"jquery": "^2.1.4",
"sequelize": "^3.7.1",
"sqlite3": "^3.0.10"
}
}
app.js
var app = require('app');
var BrowserWindow = require('browser-window');
require('crash-reporter').start();
var mainWindow = null;
app.on('window-all-closed', function() {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('ready', function() {
mainWindow = new BrowserWindow({width: 800, height: 600});
mainWindow.loadUrl('file://' + __dirname + '/index.html');
mainWindow.on('closed', function() {
mainWindow = null;
});
});
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags always come first -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
</head>
<body>
<p>Example</p>
<script src="models.js"></script>
</body>
</html>
models.js
var Sequelize = require('sequelize');
var sequelize = new Sequelize('bdgt', 'username', 'password', {
dialect: 'sqlite',
storage: 'example.db',
});
var User = sequelize.define('User', {
username: Sequelize.STRING,
birthday: Sequelize.DATE
});
sequelize.sync().then(function() {
return User.create({
username: 'janedoe',
birthday: new Date(1980, 6, 20)
});
}).then(function(jane) {
console.log(jane.get({
plain: true
}));
});
使用 npm install
安装依赖项使用 npm start
的问题。运行 node models.js
将显示序列化作品本身。
Install the dependencies using npm install
and reproduce the problem using npm start
. Running node models.js
will show sequelize works one its own.
推荐答案
最后,我根据@Josh提供的文章以及其他博客文章和问题讨论,找到了解决该问题的可行解决方案。下面,我写下了为解决此问题而采取的所有步骤。 最终解决方案发布在此答案的底部
Finally I found a working solution to this problem, based on article provided by @Josh, and other blog posts and issue discussions. Below I wrote all steps I have taken in order to solve this problem. The final solution is posted on the bottom of this answer
我关注了电子回购。
简单方法
我已经安装了电子重建 code>节点包并运行
./ node_modules / .bin / electron-rebuild
,这给了我以下错误:
I've installed electron-rebuild
node package and run ./node_modules/.bin/electron-rebuild
which gave me the following error:
node-pre-gyp ERR! install error
node-pre-gyp ERR! stack Error: Unsupported target version: 0.31.2
node-pre-gyp ERR! command "node" "/my/project/dir/node_modules/sqlite3/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! not ok
npm ERR! Failed at the sqlite3@3.0.10 install script 'node-pre-gyp install --fallback-to-build'.
npm ERR! This is most likely a problem with the sqlite3 package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-pre-gyp install --fallback-to-build
node-gyp方式
我已经全局安装了node-gyp模块,并输入了 ./ node_modules / sqlite3
目录。然后我尝试运行以下命令:
I've installed node-gyp module globally and entered ./node_modules/sqlite3
dir. Then I tried to run the following command:
node-gyp rebuild --target=0.31.2 --arch=x64 --dist-url=https://atom.io/download/atom-shell
并获得出现以下错误:
gyp: Undefined variable module_name in binding.gyp while trying to load binding.gyp
npm方式
sqlite3叉
最后我尝试下载一些 sqlite3分支。不幸的是结果是相同的。
Finally I tried to download few of the sqlite3 forks. Unfortunately results were the same.
最终尝试-解决方案
博客@Josh提供的信息对我来说是禁止的,但我发现 Google缓存版本。我还关注了电子问题的讨论。
The blog post provided by @Josh was forbidden for me, but I found google cached version of it. I also followed the discussion of the electron issue.
下面介绍的步骤应该会为您提供一个可运行的sqlite3软件包。
Steps presented below should get you a working sqlite3 package.
- 在您的软件包中更改电子预制的版本。 json
电子预建: 0.29.1
- 重新安装
电子预建
- 将目录更改为
。/node_modules / sqlite3
- 运行预发布脚本
npm运行预发布
-
配置node-gyp module_name和module_path
- Change version of electron-prebuilt in your package.json
"electron-prebuilt": "0.29.1"
- Reinstall
electron-prebuilt
- Change directory into
./node_modules/sqlite3
- Run prepublish scripts
npm run prepublish
Configure node-gyp module_name and module_path
node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/node-v44-linux-x64
重建软件包
Rebuild package
node-gyp rebuild --target=0.29.1 --arch=x64 --target_platform=linux --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/node-v44-linux-x64
我尝试使用0.31.2版进行编译电子预包装的包装,但由于某种原因失败。
I tried to compile using version 0.31.2 of electron-prebuilt package, but it failed for some reason.
如果您使用的是Mac,请替换 linux
使用 darwin
。
If you are using mac replace linux
with darwin
.
如果您的操作系统是32位的,请替换 x64
和 ia32
If your os architecture is 32 bit replace x64
with ia32
这篇关于电子和续集错误:不支持方言sqlite的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!