electron使用sqlite3、escpos、printer、serialport的奇葩问题

报错一系列

Error: `C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe` failed with exit code: 1

Building module: sqlite3, Completed: 3在此解决方案中一次生成一个项目。若要启用并行生成,请添加“-m”开关。
| Building module: sqlite3, Completed: 3  nothing.vcxproj -> F:\work\kbs\code\KbsStorePC\node_modules\sqlite3\build\Release\\nothing.lib
/ Building module: sqlite3, Completed: 3  unpack_sqlite_dep
| Building module: sqlite3, Completed: 3  sqlite3.c
| Building module: sqlite3, Completed: 3  win_delay_load_hook.cc
\ Building module: sqlite3, Completed: 3  sqlite3.vcxproj -> F:\work\kbs\code\KbsStorePC\node_modules\sqlite3\build\Release\\sqlite3.lib
| Building module: sqlite3, Completed: 3  backup.cc
- Building module: sqlite3, Completed: 3F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2263,24): error C2061: 语法错误: 标识符“napi_threadsafe_functio
n” [F:\work\kbs\code\KbsStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2263,23): error C2535: “Napi::ThreadSafeFunction::Thread
SafeFunction(void)”: 已经定义或声明成员函数 [F:\work\kbs\code\KbsStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2262): message : 参见“Napi::ThreadSafeFunction::ThreadSafe
Function”的声明 [F:\work\kbs\code\KbsStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2265,14): error C2833: “operator napi_threadsafe_functio
n”不是可识别的运算符或类型 [F:\work\kbs\code\KbsStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2265,38): error C2059: 语法错误:“newline” [F:\work\kbs\code\
KbsStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2265,46): error C2238: 意外的标记位于“;”之前 [F:\work\kbs\code\Kb
sStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2331,25): error C2061: 语法错误: 标识符“napi_threadsafe_functio
n_call_mode” [F:\work\kbs\code\KbsStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2338,30): error C3646: “_tsfn”: 未知重写说明符 [F:\work\kbs\cod
e\KbsStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2338,35): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 i
nt [F:\work\kbs\code\KbsStorePC\node_modules\sqlite3\build\node_sqlite3.vcxproj]
F:\work\kbs\code\KbsStorePC\node_modules\node-addon-api\napi.h(2479,9): error C2061: ....

 或者这样

 electron-v4.0-win32-x64\node_sqlite3.node'

gyp ERR! cwd F:\my\code\electron\KbsStorePC\node_modules\usb

npm ERR! gyp ERR! configure error
npm ERR! gyp ERR! stack Error: Could not find any Visual Studio installation to use
npm ERR! gyp ERR! stack at VisualStudioFinder.fail (C:\Users\mayur\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
npm ERR! gyp ERR! stack at C:\Users\mayur\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:74:16
npm ERR! gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (C:\Users\mayur\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
npm ERR! gyp ERR! stack at C:\Users\mayur\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:70:14
npm ERR! gyp ERR! stack at C:\Users\mayur\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:372:16
npm ERR! gyp ERR! stack at C:\Users\mayur\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\util.js:54:7
npm ERR! gyp ERR! stack at C:\Users\mayur\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\util.js:33:16
npm ERR! gyp ERR! stack at ChildProcess.exithandler (child_process.js:397:5)
npm ERR! gyp ERR! stack at ChildProcess.emit (events.js:400:28)
npm ERR! gyp ERR! stack at maybeClose (internal/child_process.js:1055:16)
npm ERR! gyp ERR! System Windows_NT 10.0.19043
npm ERR! gyp ERR! command "C:\Program Files\nodejs\node.exe" "C:\Users\mayur\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd E:\work\chetna node\chetnabackend\node_modules\usb
npm ERR! gyp ERR! node -v v14.17.6
npm ERR! gyp ERR! node-gyp -v v7.1.2
npm ERR! gyp ERR! not ok

.....

statuses.js报错

gyp: undefined variable napi_build_version in binding.gyp while trying to load binding.gyp

 

 

等等。。。。一系列问题。

解决方法

解决方法分两步骤....

环境

一、确保你的visual studio安装好

下载地址

 二、安装好python2.7版本并设置好环境变量

cmd

python -v 

题外话小知识:

 1. 这时候有人会说要设置 npm config set pyhon xxxx  跟 设置visual studio 这些成什么 2017 啥的。。。

你可以来到

 

这里配置,个人觉得没啥用。

2.也有人说使用来安装

npm install --global windows-build-tools 

道理是一样的这个看个人,安装了会自动帮你安装python2.7还会下载visual studio.exe文件,需要你进入到目录运行安装。

正常安装的目录 C:\Users\16330\.windows-build-tools

 三、安装node-gyp

npm install -g node-gyp

安装了使用

node-gyp -v
node-gyp list

 记得要安装npm、yarn(为什么要yarn,因为这些包下载的时候用npm会有问题,cnpm有些包是找不到的)

 好了,编译环境是安装了。

包(依赖)方案

版本要求跟下面一致,安装的时候需要翻墙

ps: escpos包如果单独安装使用 `yarn add escpos` 进行安装,不要使用npm安装。

"dependencies": {
"escpos": "^3.0.0-alpha.6",
"printer": "^0.4.0",
"serialport": "^9.2.1",
"sqlite3": "^4.0.4",
}

安装的时候要把 `"printer": "^0.4.0"` 移除,使用 `yarn isntall` 进行安装

"dependencies": {
"escpos": "^3.0.0-alpha.6",
"serialport": "^9.2.1",
"sqlite3": "^4.0.4",
}

安装完成,使用 `npm install printer --legacy-peer-deps` 进行安装`printer` 速度会比较慢。

安装完就可以编译了

.\node_modules\.bin\electron-rebuild.cmd

运行的时候,escpos包会报错如图:

 

 重新运行就可以了

 总结

win10下使用electron的sqlite3、escpos、printer、serialport是很多坑,我也翻遍它们的github了,都没啥解决方案,全部都是版本问题。使用win10使用的话,一定要对照我列出的版本进行安装。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,下面是一个使用 Vite、TypeScript 和 ElectronSQLite3 示例项目。 首先,需要安装以下依赖: - vite - electron - electron-builder(可选,用于将应用程序打包成可执行文件) - sqlite3 - @types/sqlite3(TypeScript 定义文件) 可以使用以下命令进行安装: ``` npm install vite electron electron-builder sqlite3 @types/sqlite3 --save-dev ``` 接下来,创建一个 Vite 项目: ``` npx vite create my-app --template electron-ts ``` 然后,在项目根目录下创建一个 `db` 目录,用于存放 SQLite3 数据库文件。 接着,创建一个 `database.ts` 文件,用于连接 SQLite3 数据库: ```typescript import sqlite3 from 'sqlite3'; const DB_PATH = './db/my-db.db'; export function connectDatabase() { return new sqlite3.Database(DB_PATH, (err) => { if (err) { console.error(err.message); } console.log('Connected to the database.'); }); } ``` 这个文件中,我们首先定义了 SQLite3 数据库文件的路径 `DB_PATH`,然后导出了一个 `connectDatabase` 函数,用于连接到数据库。 接下来,我们可以创建一个 `users.ts` 文件,用于操作用户表: ```typescript import { connectDatabase } from './database'; const db = connectDatabase(); export interface User { id: number; name: string; email: string; } export function getAllUsers(): Promise<User[]> { return new Promise((resolve, reject) => { db.all('SELECT * FROM users', (err, rows) => { if (err) { reject(err); } else { resolve(rows); } }); }); } export function addUser(user: User): Promise<number> { return new Promise((resolve, reject) => { db.run( 'INSERT INTO users(name, email) VALUES(?, ?)', [user.name, user.email], function (err) { if (err) { reject(err); } else { resolve(this.lastID); } } ); }); } ``` 在这个文件中,我们首先导入了 `connectDatabase` 函数,并使用它连接到了数据库。然后,我们定义了一个 `User` 接口,用于表示用户的数据结构。 接着,我们导出了两个函数: - `getAllUsers`:用于获取所有用户记录。 - `addUser`:用于添加一条新的用户记录。 这两个函数都是返回 Promise 对象的,因为它们都是需要异步执行的操作。 最后,我们可以在 `renderer.ts` 文件中调用这些函数: ```typescript import { getAllUsers, addUser, User } from './users'; const userList = document.querySelector('#user-list')!; const nameInput = document.querySelector('#name-input') as HTMLInputElement; const emailInput = document.querySelector('#email-input') as HTMLInputElement; const addBtn = document.querySelector('#add-btn')!; async function loadUsers() { const users = await getAllUsers(); userList.innerHTML = ''; users.forEach((user) => { const li = document.createElement('li'); li.textContent = `${user.id} - ${user.name} (${user.email})`; userList.appendChild(li); }); } addBtn.addEventListener('click', async () => { const user: User = { id: 0, name: nameInput.value, email: emailInput.value, }; await addUser(user); await loadUsers(); }); loadUsers(); ``` 在这个文件中,我们首先导入了 `getAllUsers` 和 `addUser` 函数,以及 `User` 接口。 然后,我们使用 DOM API 获取了一些元素,包括用户列表、姓名输入框、邮箱输入框和添加按钮。 接着,我们定义了一个 `loadUsers` 函数,用于加载所有用户记录,并将它们显示在用户列表中。 最后,我们在添加按钮的点击事件处理程序中,获取了用户输入的姓名和邮箱,创建了一个新的用户对象,并调用了 `addUser` 函数将其添加到数据库中。然后,我们又调用了 `loadUsers` 函数重新加载用户列表。 现在,可以使用以下命令启动应用程序: ``` npm run dev ``` 这将同时启动 Vite 和 Electron,打开应用程序窗口。 在窗口中,可以输入用户的姓名和邮箱,点击添加按钮,然后应该会在用户列表中看到新添加的用户记录。 最后,如果想要将应用程序打包成可执行文件,可以使用以下命令: ``` npm run build ``` 这将使用 Electron Builder 将应用程序打包成可执行文件,并输出到 `dist` 目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

An_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值