电子和续集错误:不支持方言sqlite [英] Electron and sequelize error: the dialect sqlite is not supported

查看:34
本文介绍了电子和续集错误:不支持方言sqlite的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 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屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆