[英]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.