簡體   English   中英

使用電子偽造打包應用程序時出現問題“無法解析'./→'”

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

我無法使用electron-forge package 我的 Electron 應用程序。 看起來罪魁禍首是本機模塊,例如'sqlite3'。

運行命令npm run package時,我收到以下錯誤: Module not found: Error: Can't resolve './→' in 'C:\Users\pauco\mybeast\node_modules\node-pre-gyp\lib'

我試過了:

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

完整跟蹤:

× 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(),
    ],
}

您可以使用插件解壓縮要解析的本機模塊

你可以在這里關注:https://www.electronforge.io/config/plugins/auto-unpack-natives

此插件會自動將 node_modules 文件夾中的所有本機模塊添加到 packagerConfig 中的 asar.unpack 配置選項。 如果您有任何本機模塊,您可能應該使用它來減少用戶機器上的加載時間和磁盤消耗。

用法:

您必須將此插件添加到您的 forge 配置中的插件數組中。完整的配置選項可在AutoUnpackNativesConfig 獲得

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM