被 node 环境整疯了

2020-01-07 16:55:32 +08:00
 VensonEEE

一个普通 elctron 应用,集成进一个 sqlite3.因为结果回调很麻烦,换成了 better-sqlite3;
编译,开发运行一起正常,这里是指在npm run dev的环境下。
打包正常,运行的时候麻烦来了,一直报构造函数不是方法:

const sqlite = require('better-sqlite3');
this.db = new sqlite(file);

打包编译命令npm run electron:build
打包配置vue.config.js

module.exports = {
  configureWebpack: {
    module: {
      rules: [{
        test: /\.less$/,
        use: [{
          loader: 'less-loader', options: {
            javascriptEnabled: true,
          },
        }],
      }],
    },
    // Configuration applied to all builds
  },
  pluginOptions: {
    electronBuilder: {
      builderOptions: {
        'productName': xxx',
        'appId': 'xxx.xxx',
        'copyright': 'xxx',//版权  信息
        'dmg': {
          'contents': [
            {
              'x': 410,
              'y': 150,
              'type': 'link',
              'path': '/Applications',
            },
            {
              'x': 130,
              'y': 150,
              'type': 'file',
            },
          ],
        },
        'mac': {
          'icon': 'build/icons/icon.icns',
        },
        'win': {
          'icon': 'build/icons/icon.ico',
          'target': [
            {
              'target': 'nsis',
              'arch': [
                'ia32',
              ],
            },
          ],
        },
        'linux': {
          'icon': 'build/icons',
        },
        // 'asar': false,
        'directories': {
          'output': 'dist_electron',
          'buildResources': 'build',
          'app': 'dist_electron/bundled',
        },
        'files': ['**/*'],
        'extraResources': [
          { 
            'from': './public/assets',
            'to': './app/assets',
          },
        ],
        'nsis': {
          'oneClick': false,
          'allowToChangeInstallationDirectory': true,
          'createDesktopShortcut': true,
          'createStartMenuShortcut': true,
        },
      },
    },
  },
};

我怀疑是编译后的.node 文件没有被打包进去。 求吴彦祖大神审阅下工作。不甚感激。

10026 次点击
所在节点    Node.js
30 条回复
ty89
2020-01-07 18:24:39 +08:00
你们可能需要招一个 webpack 配置工程师
jtwor
2020-01-07 18:26:56 +08:00
@UnluckyNinja 这是最坏的情况。。
duan602728596
2020-01-07 19:15:04 +08:00
奥,差点忘了,你可能需要用 electron-gyp 重新编译一下
duan602728596
2020-01-07 19:18:50 +08:00
如果模块原来是用 node-gyp 编译的,在 electron 里需要用 electron-gyp 重新编译
shadeofgod
2020-01-07 19:49:01 +08:00
前段时间给 better sqlite3 重新编译了一个 sqlcipher 的版本在项目里用,也是很多坑。

1. webpack output 的目录看看有没有 .node 文件就知道有没有成功打包进去了。
2. "postinstall": "electron-builder install-app-deps" 这个已经干了 node-gyp rebuild 的活了。
3. windows 上使用 asar 会有问题,没找到解法,所以 win 上我干脆关掉 asar 了
4. 因为 sqlcipher 依赖 openssl 所以我碰到了一些缺少动态库的问题,但是报错也可能是报构造函数不是方法,完全看不出来缺了啥,最后用 http://www.dependencywalker.com/https://docs.microsoft.com/en-us/sysinternals/downloads/procmon 查了半天缺哪些东西。

还有一些杂七杂八的有点忘了,直接使用 better-sqlite3 应该会简单很多。
crossle
2020-01-07 20:03:45 +08:00
你可以参考我们开源的桌面程序 https://github.com/mixinnetwork/desktop-app, 同样是使用的 Electron + Vue + Better-sqlite3
shadeofgod
2020-01-08 00:17:16 +08:00
@crossle 看了一下挺不错的,话说你们读写都在主窗口那个 renderer process 做吗?有没有引起过 UI 的卡顿问题?
crossle
2020-01-08 15:23:20 +08:00
@shadeofgod 都在 renderer process, 没感觉卡顿,难道还要在 main process ?
shadeofgod
2020-01-08 18:44:22 +08:00
@crossle 如果一次要写的数据比较多就可能卡顿,放 main 也会,因为 main 需要不断和 renderer 进行 ipc 通信,我们是把写入放在另一个隐藏的 renderer process
crossle
2020-01-10 22:21:08 +08:00
@shadeofgod 是个方法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/635856

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX