1、配置 Server 打包位置

// vue.config.js
pluginOptions: {
    electronBuilder: {
      builderOptions: {
        //...
        // 匹配server中的所有文件夾和文件
        extraResources: ['server/**/**'] // 指定打包 Server 到 Resource 文件夾中。
      }
    }
}

會將 server 文件夾打包到 Resources 文件夾中。爲什麼不打包大 app.asar 中呢?因爲 .asar 文件是隻讀的,無法進行數據庫的寫入。

2、配置webpack

// vue.config.js
configureWebpack: {
  externals: ['pg', 'sqlite3', 'tedious', 'pg-hstore']
}

3、創建 Electron 子進程

function createServerProcess() {
  if (!isDevelopment) {
    // 生產環境
    serverProcess = fork('../server/index.js', [], {
      cwd: path.join(__dirname, '../server')
    })
  } else {
    // 開發環境
    serverProcess = fork(require.resolve('../server/index.js'))
    serverProcess.on('close', code => {
      console.log('子線程已經退出', code)
    })
  }
}

程序退出時,需要終止子進程 process.kill(serverProcess.pid)

至此:Mac可以啓動服務和訪問數據庫

問題

windows 下無法啓動服務 && Please install sqlite3 錯誤

  1. 在 Sequelize 中指定數據庫的類型,默認有時無法讀取到。

  2. 執行 cnpm i 命令安裝依賴包,會自動對sqlite3進行編譯, node_module/sqlite3/lib/binding 中可以看到文件。或者執行命令 npm run postinstall (管理員身份執行, npm i 會默認執行該命令)

  3. 或者手動編譯 npm rebuild 進行手動編譯。

  4. 執行命令編譯爲 electron匹配的 sqlite3 文件。

node-gyp rebuild --target=6.1.0 --arch=x64 --target_platform=win32 --dist-url=https://npm.taobao.org/mirrors/node/ --module_name=node_sqlite3 --module_path=../lib/binding/electron-v6.1-win32-x64
  1. target 爲 electron 版本,或者 node 版本
  2. –arch 架構;–traget_platform: 目標系統
  3. –dist-url: Header 文件下載地址

注:參考另一篇文中: Koa使用Sqlite3和Sequelize

相關文章