简体   繁体   中英

Problem while packaging application with electron-forge “Can't resolve './→' ”

I am not able to package my Electron application with electron-forge . It looks like that the culprits are the native modules such as 'sqlite3'.

When running the command npm run package , I get the following error: Module not found: Error: Can't resolve './→' in 'C:\Users\pauco\mybeast\node_modules\node-pre-gyp\lib'

I tried:

  • npm rebuild
  • node_modules\.bin\electron-rebuild

Full trace:

× Compiling Main Process Code

An unhandled error has occurred inside Forge:
Compilation errors in the main process: Hash: dac46d131e24e591c251
Version: webpack 4.44.0
Time: 2526ms
Built at: 2020-07-27 18:35:10
                                                          Asset      Size  Chunks         Chunk Names
                                                       index.js   350 KiB       0         main
                                                   index.js.map  1.28 MiB       0  [dev]  main
native_modules//lib/binding/napi-v3-win32-x64/node_sqlite3.node  1.36 MiB
 native_modules/lib\binding\napi-v3-win32-x64\node_sqlite3.node  1.36 MiB
Entrypoint main = index.js index.js.map
  [3] external "path" 42 bytes {0} [built]
  [4] external "fs" 42 bytes {0} [built]
  [8] external "electron" 42 bytes {0} [built]
 [26] ./src/backend/backend.ts 6.12 KiB {0} [built]
 [27] external "child_process" 42 bytes {0} [built]
 [45] ./src/backend/GameManager/services/GameManagerService.ts 7.59 KiB {0} [built]
 [46] ./node_modules/axios/index.js 40 bytes {0} [built]
 [56] ./node_modules/debug/src/index.js 263 bytes {0} [built]
 [87] ./src/backend/GameManager/GameManager.ts 864 bytes {0} [built]
 [88] ./src/backend/GameManager/services/GameDiscovererService.ts 7.68 KiB {0} [built]
[125] ./src/backend/Storage.ts 5.4 KiB {0} [built]
[126] ./node_modules/sqlite3/lib/sqlite3.js 6.16 KiB {0} [built]
[200] ./src/backend/utils.ts 737 bytes {0} [built]
[201] ./node_modules/electron-squirrel-startup/index.js 1 KiB {0} [built]
[202] ./node_modules/rxjs/_esm5/index.js + 101 modules 156 KiB {0} [built]
      | ./node_modules/rxjs/_esm5/index.js 3.33 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/config.js 859 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/util/UnsubscriptionError.js 707 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/Subscription.js 4.92 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/Subscriber.js 8.44 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/symbol/observable.js 218 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/util/identity.js 127 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/util/pipe.js 565 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/Observable.js 3.95 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/util/ObjectUnsubscribedError.js 552 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/Subject.js 5.25 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/observable/ConnectableObservable.js 5.38 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/operators/groupBy.js 6.59 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/BehaviorSubject.js 1.46 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/Scheduler.js 602 bytes [built]
      |     + 87 hidden modules
    + 188 hidden modules

WARNING in ./node_modules/better-queue/lib/queue.js
Module not found: Error: Can't resolve 'better-queue-→' in 'C:\Users\pauco\mybeast\node_modules\better-queue\lib'
 @ ./node_modules/better-queue/lib/queue.js
 @ ./node_modules/apicalypse/dist/index.js
 @ ./src/backend/GameManager/services/GameDiscovererService.ts
 @ ./src/backend/GameManager/GameManager.ts
 @ ./src/backend/backend.ts

ERROR in ./node_modules/node-pre-gyp/lib/node-pre-gyp.js
Module not found: Error: Can't resolve './→' in 'C:\Users\pauco\mybeast\node_modules\node-pre-gyp\lib'
 @ ./node_modules/node-pre-gyp/lib/node-pre-gyp.js 52:13-32 184:38-57
 @ ./node_modules/sqlite3/lib/sqlite3-binding.js
 @ ./node_modules/sqlite3/lib/sqlite3.js
 @ ./src/backend/Storage.ts
 @ ./src/backend/backend.ts
Error: Compilation errors in the main process: Hash: dac46d131e24e591c251
Version: webpack 4.44.0
Time: 2526ms
Built at: 2020-07-27 18:35:10
                                                          Asset      Size  Chunks         Chunk Names
                                                       index.js   350 KiB       0         main
                                                   index.js.map  1.28 MiB       0  [dev]  main
native_modules//lib/binding/napi-v3-win32-x64/node_sqlite3.node  1.36 MiB
 native_modules/lib\binding\napi-v3-win32-x64\node_sqlite3.node  1.36 MiB
Entrypoint main = index.js index.js.map
  [3] external "path" 42 bytes {0} [built]
  [4] external "fs" 42 bytes {0} [built]
  [8] external "electron" 42 bytes {0} [built]
 [26] ./src/backend/backend.ts 6.12 KiB {0} [built]
 [27] external "child_process" 42 bytes {0} [built]
 [45] ./src/backend/GameManager/services/GameManagerService.ts 7.59 KiB {0} [built]
 [46] ./node_modules/axios/index.js 40 bytes {0} [built]
 [56] ./node_modules/debug/src/index.js 263 bytes {0} [built]
 [87] ./src/backend/GameManager/GameManager.ts 864 bytes {0} [built]
 [88] ./src/backend/GameManager/services/GameDiscovererService.ts 7.68 KiB {0} [built]
[125] ./src/backend/Storage.ts 5.4 KiB {0} [built]
[126] ./node_modules/sqlite3/lib/sqlite3.js 6.16 KiB {0} [built]
[200] ./src/backend/utils.ts 737 bytes {0} [built]
[201] ./node_modules/electron-squirrel-startup/index.js 1 KiB {0} [built]
[202] ./node_modules/rxjs/_esm5/index.js + 101 modules 156 KiB {0} [built]
      | ./node_modules/rxjs/_esm5/index.js 3.33 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/config.js 859 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/util/UnsubscriptionError.js 707 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/Subscription.js 4.92 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/Subscriber.js 8.44 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/symbol/observable.js 218 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/util/identity.js 127 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/util/pipe.js 565 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/Observable.js 3.95 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/util/ObjectUnsubscribedError.js 552 bytes [built]
      | ./node_modules/rxjs/_esm5/internal/Subject.js 5.25 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/observable/ConnectableObservable.js 5.38 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/operators/groupBy.js 6.59 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/BehaviorSubject.js 1.46 KiB [built]
      | ./node_modules/rxjs/_esm5/internal/Scheduler.js 602 bytes [built]
      |     + 87 hidden modules
    + 188 hidden modules

WARNING in ./node_modules/better-queue/lib/queue.js
Module not found: Error: Can't resolve 'better-queue-→' in 'C:\Users\pauco\mybeast\node_modules\better-queue\lib'
 @ ./node_modules/better-queue/lib/queue.js
 @ ./node_modules/apicalypse/dist/index.js
 @ ./src/backend/GameManager/services/GameDiscovererService.ts
 @ ./src/backend/GameManager/GameManager.ts
 @ ./src/backend/backend.ts

ERROR in ./node_modules/node-pre-gyp/lib/node-pre-gyp.js
Module not found: Error: Can't resolve './→' in 'C:\Users\pauco\mybeast\node_modules\node-pre-gyp\lib'
 @ ./node_modules/node-pre-gyp/lib/node-pre-gyp.js 52:13-32 184:38-57
 @ ./node_modules/sqlite3/lib/sqlite3-binding.js
 @ ./node_modules/sqlite3/lib/sqlite3.js
 @ ./src/backend/Storage.ts
 @ ./src/backend/backend.ts
    at cb (C:\Users\pauco\mybeast\node_modules\@electron-forge\plugin-webpack\src\WebpackPlugin.ts:250:31)
    at finalCallback (C:\Users\pauco\mybeast\node_modules\webpack\lib\Compiler.js:257:39)
    at C:\Users\pauco\mybeast\node_modules\webpack\lib\Compiler.js:273:13
    at AsyncSeriesHook.eval [as callAsync] (eval at create (C:\Users\pauco\mybeast\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:4:1)
    at AsyncSeriesHook.lazyCompileHook (C:\Users\pauco\mybeast\node_modules\tapable\lib\Hook.js:154:20)
    at onCompiled (C:\Users\pauco\mybeast\node_modules\webpack\lib\Compiler.js:271:21)
    at C:\Users\pauco\mybeast\node_modules\webpack\lib\Compiler.js:681:15
    at AsyncSeriesHook.eval [as callAsync] (eval at create (C:\Users\pauco\mybeast\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:4:1)
    at AsyncSeriesHook.lazyCompileHook (C:\Users\pauco\mybeast\node_modules\tapable\lib\Hook.js:154:20)
    at C:\Users\pauco\mybeast\node_modules\webpack\lib\Compiler.js:678:31
    at AsyncSeriesHook.eval [as callAsync] (eval at create (C:\Users\pauco\mybeast\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:4:1)
    at AsyncSeriesHook.lazyCompileHook (C:\Users\pauco\mybeast\node_modules\tapable\lib\Hook.js:154:20)
    at C:\Users\pauco\mybeast\node_modules\webpack\lib\Compilation.js:1423:35
    at AsyncSeriesHook.eval [as callAsync] (eval at create (C:\Users\pauco\mybeast\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:4:1)
    at AsyncSeriesHook.lazyCompileHook (C:\Users\pauco\mybeast\node_modules\tapable\lib\Hook.js:154:20)
    at C:\Users\pauco\mybeast\node_modules\webpack\lib\Compilation.js:1414:32

package.json

{
  "name": "mybeast",
  "productName": "mybeast",
  "version": "1.0.0",
  "description": "",
  "main": ".webpack/main",
  "scripts": {
    "start": "electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make",
    "publish": "electron-forge publish",
    "lint": "eslint --ext .ts ."
  },
  "author": "",
  "license": "ISC",
  "config": {
    "forge": {
      "packagerConfig": {},
      "makers": [
        {
          "name": "@electron-forge/maker-squirrel",
          "config": {
            "name": "mybeast"
          }
        }
      ],
      "plugins": [
        [
          "@electron-forge/plugin-webpack",
          {
            "mainConfig": "./webpack.backend.config.js",
            "renderer": {
              "config": "./webpack.renderer.config.js",
              "entryPoints": [
                {
                  "html": "./src/frontend/index.html",
                  "js": "./src/frontend/frontend.ts",
                  "name": "frontend"
                },
                {
                  "html": "./src/player/index.html",
                  "js": "./src/player/Player.ts",
                  "name": "player"
                }
              ]
            }
          }
        ]
      ]
    }
  },
  "devDependencies": {
    "@types/request": "^2.48.5",
    "@types/sqlite3": "^3.1.6",
    "@electron-forge/cli": "^6.0.0-beta.52",
    "@electron-forge/maker-deb": "^6.0.0-beta.52",
    "@electron-forge/maker-rpm": "^6.0.0-beta.52",
    "@electron-forge/maker-squirrel": "^6.0.0-beta.52",
    "@electron-forge/maker-zip": "^6.0.0-beta.52",
    "@electron-forge/plugin-webpack": "^6.0.0-beta.52",
    "@marshallofsound/webpack-asset-relocator-loader": "^0.5.0",
    "@typescript-eslint/eslint-plugin": "^2.34.0",
    "@typescript-eslint/parser": "^2.34.0",
    "css-loader": "^3.6.0",
    "electron": "9.1.1",
    "electron-rebuild": "^1.11.0",
    "eslint": "^6.8.0",
    "eslint-plugin-import": "^2.22.0",
    "fork-ts-checker-webpack-plugin": "^3.1.1",
    "html-loader": "^1.1.0",
    "node-loader": "^0.6.0",
    "style-loader": "^0.23.1",
    "ts-loader": "^6.2.2",
    "typescript": "^3.9.7",
    "sass": "^1.26.10",
    "sass-loader": "^9.0.2",
    "source-map-support": "^0.5.19"
  },
  "dependencies": {
    "electron-squirrel-startup": "^1.0.0",
    "apicalypse": "^0.1.6",
    "axios": "^0.19.2",
    "sqlite3": "^5.0.0",
    "ws": "^7.3.1"
  }
}

webpack.backend.config.js

module.exports = {
    entry: './src/backend/backend.ts',
    resolve: {
        extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json', '.scss']
    },
    module: {
        rules: [
            {
                test: /\.node$/,
                use: 'node-loader',
            },
            {
                test: /\.(m?js|node)$/,
                parser: {amd: false},
                use: {
                    loader: '@marshallofsound/webpack-asset-relocator-loader',
                    options: {
                        outputAssetBase: 'native_modules',
                    },
                },
            },
            {
                test: /\.tsx?$/,
                exclude: /(node_modules|\.webpack)/,
                use: {
                    loader: 'ts-loader',
                    options: {
                        transpileOnly: true
                    }
                }
            },
        ]
    }
}

webpack.renderer.config.js

const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
    resolve: {
        alias: {
            'vue$': 'vue/dist/vue.esm.js'
        },
        mainFields: ['main', 'browser'],
        extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json']
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            },
            {
                test: /\.s[ac]ss$/,
                use: [
                    'style-loader',
                    'css-loader',
                    'sass-loader'
                ]
            },
            {
                test: /\.html$/,
                loader: 'html-loader',
                options: {
                    minimize: true
                }
            },
            {
                test: /\.node$/,
                use: 'node-loader',
            },
            {
                test: /\.(m?js|node)$/,
                parser: {amd: false},
                use: {
                    loader: '@marshallofsound/webpack-asset-relocator-loader',
                    options: {
                        outputAssetBase: 'native_modules',
                    },
                },
            },
            {
                test: /\.tsx?$/,
                include: /src/,
                use: 'ts-loader',
            },
        ]
    },
    plugins: [
        new VueLoaderPlugin(),
    ],
}

you can use plugin to unpack native modules to be resolved

You can follow here:https://www.electronforge.io/config/plugins/auto-unpack-natives

This plugin will automatically add all native modules in your node_modules folder to the asar.unpack config option in your packagerConfig. If you have any native modules as all you should probably use this to reduce loading times and disk consumption on your users' machines.

Usage:

You must add this plugin to your plugins array in your forge config The complete config options are available at AutoUnpackNativesConfig .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM