我无法使用 electron-forge
打包我的 Electron 应用程序.
看起来罪魁祸首是 native 模块,例如'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
包.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.jsmodule.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.jsconst 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(),
],
}
最佳答案
您可以使用插件解压缩要解析的 native 模块
你可以在这里关注:
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.
关于javascript - 使用 Electron 伪造打包应用程序时出现问题 "Can' t 解决 './→' “,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63119757/