kindring vor 11 Monaten
Ursprung
Commit
729c53413f
7 geänderte Dateien mit 517 neuen und 211 gelöschten Zeilen
  1. 391 205
      package-lock.json
  2. 11 3
      package.json
  3. 53 2
      plugins/buildPlugin.ts
  4. 1 1
      plugins/devPlugin.ts
  5. 38 0
      src/common/db/db.ts
  6. 13 0
      src/main/mainEntry.ts
  7. 10 0
      src/util/promiseHandle.ts

Datei-Diff unterdrückt, da er zu groß ist
+ 391 - 205
package-lock.json


+ 11 - 3
package.json

@@ -5,17 +5,25 @@
   "scripts": {
     "dev": "vite",
     "build": "vue-tsc && vite build",
-    "preview": "vite preview"
+    "preview": "vite preview",
+    "rebuild": "electron-rebuild -f -w better-sqlite3"
   },
   "devDependencies": {
+    "@types/better-sqlite3": "^7.6.10",
     "@vitejs/plugin-vue": "^4.2.3",
-    "better-sqlite3": "^9.1.1",
-    "electron": "^26.1.0",
     "electron-builder": "^24.6.4",
+    "electron-rebuild": "^3.2.9",
+    "knex": "^3.1.0",
+    "better-sqlite3": "^9.6.0",
+    "electron": "^30.0.3",
+    "fs-extra": "^11.2.0",
     "typescript": "^5.0.2",
     "vite": "^4.4.5",
     "vite-plugin-optimizer": "^1.4.2",
     "vue": "^3.3.4",
     "vue-tsc": "^1.8.5"
+  },
+  "dependencies": {
+
   }
 }

+ 53 - 2
plugins/buildPlugin.ts

@@ -1,6 +1,6 @@
 //plugins\buildPlugin.ts
 import path from "path";
-import fs from "fs";
+import fs from "fs-extra";
 
 class BuildObj {
     //编译主进程代码
@@ -11,9 +11,55 @@ class BuildObj {
             platform: "node",
             minify: true,
             outfile: "./dist/mainEntry.js",
-            external: ["electron"],
+            external: ["electron", "pg", "tedious", "mysql", "mysql2", "oracledb", "pg-query-stream", "sqlite3"],
         });
     }
+    async prepareSqlite() {
+        //拷贝better-sqlite3
+        let srcDir = path.join(process.cwd(), `node_modules/better-sqlite3`);
+        let destDir = path.join(process.cwd(), `dist/node_modules/better-sqlite3`);
+        fs.ensureDirSync(destDir);
+        fs.copySync(srcDir, destDir, {
+            filter: (src) => {
+                if (src.endsWith("better-sqlite3") || src.endsWith("build") || src.endsWith("Release") || src.endsWith("better_sqlite3.node")) return true;
+                else if (src.includes("node_modules\\better-sqlite3\\lib")) return true;
+                else return false;
+            },
+        });
+
+        let pkgJson = `{"name": "better-sqlite3","main": "lib/index.js"}`;
+        let pkgJsonPath = path.join(process.cwd(), `dist/node_modules/better-sqlite3/package.json`);
+        fs.writeFileSync(pkgJsonPath, pkgJson);
+        //制作bindings模块
+        let bindingPath = path.join(process.cwd(), `dist/node_modules/bindings/index.js`);
+        fs.ensureFileSync(bindingPath);
+        let bindingsContent = `module.exports = () => {
+            let addonPath = require("path").join(__dirname, '../better-sqlite3/build/Release/better_sqlite3.node');
+            return require(addonPath);
+        };`;
+        fs.writeFileSync(bindingPath, bindingsContent);
+
+        pkgJson = `{"name": "bindings","main": "index.js"}`;
+        pkgJsonPath = path.join(process.cwd(), `dist/node_modules/bindings/package.json`);
+        fs.writeFileSync(pkgJsonPath, pkgJson);
+    }
+    prepareKnexjs() {
+        let pkgJsonPath = path.join(process.cwd(), `dist/node_modules/knex`);
+        fs.ensureDirSync(pkgJsonPath);
+        require("esbuild").buildSync({
+            entryPoints: ["./node_modules/knex/knex.js"],
+            bundle: true,
+            platform: "node",
+            format: "cjs",
+            minify: true,
+            outfile: "./dist/node_modules/knex/index.js",
+            external: ["oracledb", "pg-query-stream", "pg", "sqlite3", "tedious", "mysql", "mysql2", "better-sqlite3"],
+        });
+        let pkgJson = `{"name": "bindings","main": "index.js"}`;
+        pkgJsonPath = path.join(process.cwd(), `dist/node_modules/knex/package.json`);
+        fs.writeFileSync(pkgJsonPath, pkgJson);
+    }
+
     //为生产环境准备package.json
     preparePackageJson() {
         let pkgJsonPath = path.join(process.cwd(), "package.json");
@@ -49,6 +95,7 @@ class BuildObj {
                     shortcutName: "fc-ele",
                 },
                 publish: [{ provider: "generic", url: "http://localhost:5500/" }],
+                extraResources: [{ from: `./db.db`, to: `./` }],
             },
             project: process.cwd(),
         };
@@ -61,9 +108,13 @@ export let buildPlugin = () => {
         name: "build-plugin",
         closeBundle: () => {
             let buildObj = new BuildObj();
+            buildObj.prepareSqlite();
             buildObj.buildMain();
             buildObj.preparePackageJson();
             buildObj.buildInstaller();
+            buildObj.prepareKnexjs();
+
         },
+
     };
 };

+ 1 - 1
plugins/devPlugin.ts

@@ -8,7 +8,7 @@ export let devPlugin = () => {
                 bundle: true,
                 platform: "node",
                 outfile: "./dist/mainEntry.js",
-                external: ["electron"],
+                external: ["electron", "pg", "tedious", "mysql", "mysql2", "oracledb", "pg-query-stream", "sqlite3"],
             });
             // 修复 'server.httpServer' is possibly 'null'. 的问题
             if(!server.httpServer) throw new Error("server.httpServer is null check devPlugin.ts");

+ 38 - 0
src/common/db/db.ts

@@ -0,0 +1,38 @@
+import knex, {Knex} from "knex";
+import fs from "fs-extra";
+import path from "path";
+
+let dbInstance: Knex | null = null;
+if (!dbInstance) {
+    let dbPath = process.env.APPDATA || (process.platform == "darwin" ? process.env.HOME + "/Library/Preferences" : process.env.HOME + "/.local/share");
+    dbPath = path.join(dbPath, "fc-ele/db.db");
+    console.log(dbPath);
+    let dbIsExist = fs.existsSync(dbPath);
+    if (!dbIsExist) {
+        let resourceDbPath = path.join(process.execPath, "../resources/db.db");
+        // 判断初始文件是否存在
+        let resourceDbIsExist = fs.existsSync(resourceDbPath);
+        if (!resourceDbIsExist) {
+            console.log("base db not find");
+            fs.ensureFile(resourceDbPath);
+            // 创建初始文件
+            dbInstance = knex({
+                client: "better-sqlite3",
+                connection: { filename: resourceDbPath },
+                useNullAsDefault: true,
+            });
+        }
+        // 复制初始文件到用户目录
+        fs.copy(resourceDbPath, dbPath).catch((err) => {
+            console.log(err);
+        });
+    }
+    // 连接数据库
+    dbInstance = knex({
+        client: "better-sqlite3",
+        connection: { filename: dbPath },
+        useNullAsDefault: true,
+    });
+}
+
+export let db = dbInstance;

+ 13 - 0
src/main/mainEntry.ts

@@ -2,6 +2,9 @@
 import { app, BrowserWindow } from "electron";
 import {CustomScheme} from "./CustomScheme.ts";
 
+import { db } from "../common/db/db.ts";
+
+
 let mainWindow: BrowserWindow;
 
 app.whenReady().then(() => {
@@ -25,4 +28,14 @@ app.whenReady().then(() => {
     }
     // 开启控制台
     mainWindow.webContents.openDevTools();
+    db("User")
+        .first()
+        .then((obj) => {
+            console.log(obj);
+        }).catch((err) => {
+        console.log("err")
+            console.log(err);
+        });
+
+
 });

+ 10 - 0
src/util/promiseHandle.ts

@@ -0,0 +1,10 @@
+// 将promise 转为
+function handle<T>(promise: Promise<T>): Promise<[Error | null | T, T | null | undefined]> {
+    return new Promise<[Error | T | null , T | null | undefined]>(resolve => {
+        promise.then(val => {
+            resolve([null, val]);
+        }).catch((err: Error )=> {
+            resolve([err, null]);
+        });
+    });
+}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.