被 node 环境整疯了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
VensonEEE
V2EX    Node.js

被 node 环境整疯了

  •  
  •   VensonEEE 2020-01-07 16:55:32 +08:00 10756 次点击
    这是一个创建于 2154 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个普通 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 文件没有被打包进去。 求吴彦祖大神审阅下工作。不甚感激。

    30 条回复    2020-01-10 22:21:08 +08:00
    Rrrrrr
        1
    Rrrrrr  
       2020-01-07 17:00:37 +08:00
    好歹把报错信息贴出来
    sunzongzheng
        2
    sunzongzheng  
       2020-01-07 17:00:56 +08:00
    VensonEEE
        3
    VensonEEE  
    OP
       2020-01-07 17:05:45 +08:00
    VensonEEE
        4
    VensonEEE  
    OP
       2020-01-07 17:06:24 +08:00
    @sunzongzheng 重新编译过了,不然 dev 就跑不起来
    VensonEEE
        5
    VensonEEE  
    OP
       2020-01-07 17:07:12 +08:00
    @Rrrrrr
    @sunzongzheng
    传了图,求指导
    BarZu
        6
    BarZu  
       2020-01-07 17:12:27 +08:00
    new sqlite.Sqlite() 这样子 ? 你应该输出 sqlite 看看是什么来的
    VensonEEE
        7
    VensonEEE  
    OP
       2020-01-07 17:14:42 +08:00
    @BarZu 是发布版有问题。 dev 是能正常运行的。发布版的 console 自动都去了
    项目地址:
    https://www.npmjs.com/package/better-sqlite3
    lovedebug
        8
    lovedebug  
       2020-01-07 17:16:24 +08:00
    一般都是引用库的版本有问题
    VensonEEE
        9
    VensonEEE  
    OP
       2020-01-07 17:22:20 +08:00
    ![微信截图_20200107172108.png]( https://i.loli.net/2020/01/07/T7GxBQE1KFiCuez.png)

    sqlite 好像是一个空对象,截图
    jtwor
        10
    jtwor  
       2020-01-07 17:29:18 +08:00
    不是应该去看看 package.json
    VensonEEE
        11
    VensonEEE  
    OP
       2020-01-07 17:34:39 +08:00
    @jtwor 运行版本 开发版本在 package.json 中没有单独配置项,所以开始就排除了。
    jtwor
        12
    jtwor  
       2020-01-07 17:39:39 +08:00
    能运行是本地你已经下载了这个库在那个 node_model 什么的 但发布是读 pkg 配置的把 里面没有打包也没把
    VensonEEE
        13
    VensonEEE  
    OP
       2020-01-07 17:46:14 +08:00
    @jtwor 确实是这样,不过我查了 pkg 也有。
    ```
    {
    "name": "xxx",
    "version": "1.0.0",
    "private": true,
    "description": "xxx",
    "author": "xxx",
    "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "dev": "vue-cli-service electron:serve",
    "electron:build": "vue-cli-service electron:build",
    "electron:serve": "vue-cli-service electron:serve",
    "postinstall": "electron-builder install-app-deps",
    "postuninstall": "electron-builder install-app-deps"
    },
    "main": "background.js",
    "dependencies": {
    "@types/strophe": "^1.2.31",
    "@xmpp/client": "^0.9.1",
    "@xmpp/debug": "^0.9.1",
    "axios": "^0.18.0",
    "better-sqlite3": "^5.4.3",
    "bignumber.js": "^9.0.0",
    "cropperjs": "^1.5.6",
    "iview": "^3.5.4",
    "md5-typescript": "^1.0.5",
    "reflect-metadata": "^0.1.13",
    "strophe": "^1.2.4",
    "v-viewer": "^1.5.1",
    "vue": "^2.6.11",
    "vue-class-component": "^7.1.0",
    "vue-i18n": "^8.15.3",
    "vue-property-decorator": "^8.3.0",
    "vue-router": "^3.1.3",
    "vuex": "^3.1.2",
    "vuex-class": "^0.3.2"
    },
    "devDependencies": {
    "@types/jquery": "^3.3.31",
    "@vue/cli-plugin-babel": "^3.12.1",
    "@vue/cli-plugin-typescript": "^3.12.1",
    "@vue/cli-service": "^3.12.1",
    "electron": "^7.1.7",
    "electron-rebuild": "^1.8.8",
    "jquery": "^3.4.1",
    "less": "^3.10.3",
    "less-loader": "^5.0.0",
    "node-sass": "^4.13.0",
    "sass-loader": "^7.3.1",
    "typescript": "^3.7.4",
    "vue-cli-plugin-electron-builder": "^1.4.4",
    "vue-template-compiler": "^2.6.11"
    }
    }

    ```
    kimiler
        14
    kimiler  
       2020-01-07 17:51:40 +08:00
    为什么你这个帖子是黑色主题?
    VensonEEE
        15
    VensonEEE  
    OP
       2020-01-07 17:55:32 +08:00
    @kimiler 我也不清楚... 看着有点费劲
    ashong
        16
    ashong  
       2020-01-07 17:56:43 +08:00 via iPhone
    @kimiler nodejs 就是黑的
    UnluckyNinja
        17
    UnluckyNinja  
       2020-01-07 18:05:06 +08:00
    我看 better-sqlite3 官方文档没有写需要用 new 来调用吧
    我猜测是因为开发环境和生产环境的语法严格程度不一样,导致一边报错另一边忽略了
    不知楼主有没有用编辑器 linter 插件或者运行 lint 命令?

    顺便吐槽下 nodejs 节点配色下的语法高亮,背景和字都是黑的,简直反人类
    duan602728596
        18
    duan602728596  
       2020-01-07 18:14:05 +08:00 via iPhone
    1. 可以试试把 require 替换成 global.require
    2. 为什么不试试 IndexedDB 或者 WebSQL 呢
    cppgohan
        19
    cppgohan  
       2020-01-07 18:17:17 +08:00   1
    node 节点的现在的样式, 代码效果有点刺眼啊 @livid 老大看看
    VensonEEE
        20
    VensonEEE  
    OP
       2020-01-07 18:23:14 +08:00
    @UnluckyNinja 感谢老哥的仔细,我刚刚把 new 加上和去了在 dev 都可以,发布版依然不行,还是熟悉的臭虫味道。

    @duan602728596 需要在本地持久化存储一个文件。

    我觉得是版本的问题。难道我 electron 和 node 的版本太高了?
    ty89
        21
    ty89  
       2020-01-07 18:24:39 +08:00
    你们可能需要招一个 webpack 配置工程师
    jtwor
        22
    jtwor  
       2020-01-07 18:26:56 +08:00
    @UnluckyNinja 这是最坏的情况。。
    duan602728596
        23
    duan602728596  
       2020-01-07 19:15:04 +08:00 via iPhone
    奥,差点忘了,你可能需要用 electron-gyp 重新编译一下
    duan602728596
        24
    duan602728596  
       2020-01-07 19:18:50 +08:00 via iPhone
    如果模块原来是用 node-gyp 编译的,在 electron 里需要用 electron-gyp 重新编译
    shadeofgod
        25
    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
        26
    crossle  
       2020-01-07 20:03:45 +08:00
    你可以参考我们开源的桌面程序 https://github.com/mixinnetwork/desktop-app, 同样是使用的 Electron + Vue + Better-sqlite3
    shadeofgod
        27
    shadeofgod  
       2020-01-08 00:17:16 +08:00
    @crossle 看了一下挺不错的,话说你们读写都在主窗口那个 renderer process 做吗?有没有引起过 UI 的卡顿问题?
    crossle
        28
    crossle  
       2020-01-08 15:23:20 +08:00
    @shadeofgod 都在 renderer process, 没感觉卡顿,难道还要在 main process ?
    shadeofgod
        29
    shadeofgod  
       2020-01-08 18:44:22 +08:00
    @crossle 如果一次要写的数据比较多就可能卡顿,放 main 也会,因为 main 需要不断和 renderer 进行 ipc 通信,我们是把写入放在另一个隐藏的 renderer process
    crossle
        30
    crossle  
       2020-01-10 22:21:08 +08:00
    @shadeofgod 是个方法
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2549 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 11:05 PVG 19:05 LAX 03:05 JFK 06:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86