我遇到找不到模块电子更新程序错误。
- Electron Builder版本:22.11.7
- 节点版本:14.17.4
- Electron版本:12.0.9
- 电子更新程序:5.2.1
- 目标:窗口
我安装了依赖项的电子更新程序。
"dependencies": {
"@types/js-cookie": "^2.2.6",
...
"electron-updater": "^5.2.1",
我用电子更新器打字。
import { app, BrowserWindow, ipcMain, dialog } from "electron";
import { autoUpdater } from "electron-updater";
所以当我构建typescript时,没有错误。但我执行了应用程序,出现了错误。所以我试着修复一些代码。这是原始代码。我删除了!node_modules。在那之后,没有任何错误。
"files": [
"desktop/*",
"build/**/*",
"build-desktop/**/*",
"!node_modules"
],
但我不想添加node_modules,因为应用程序的大小增加了。这是通过tsc--traceResolution选项获得的日志。正如您在日志中看到的,当构建时,会发现电子更新程序。但是为什么在运行时找不到模块?
======== Resolving module 'electron-updater' from 'D:/DI/front-end/desktop/main.ts'. ========
Resolving real path for 'D:/DI/front-end/node_modules/electron-updater/out/main.d.ts', result 'D:/DI/front-end/node_modules/electron-updater/out/main.d.ts'.
======== Module name 'electron-updater' was successfully resolved to 'D:/DI/front-end/node_modules/electron-upd
此列表是通过--listFiles选项获得的tsc编译文件。构建命令是
tsc desktop/main.ts --skipLibCheck --target es5 --outDir build-desktop --esModuleInterop
D:/DI/front-end/node_modules/electron-updater/out/AppAdapter.d.ts
D:/DI/front-end/node_modules/electron-updater/out/DownloadedUpdateHelper.d.ts
D:/DI/front-end/node_modules/electron-updater/out/electronHttpExecutor.d.ts
D:/DI/front-end/node_modules/electron-updater/out/providers/Provider.d.ts
D:/DI/front-end/node_modules/typed-emitter/index.d.ts
D:/DI/front-end/node_modules/electron-updater/out/AppUpdater.d.ts
D:/DI/front-end/node_modules/electron-updater/out/BaseUpdater.d.ts
D:/DI/front-end/node_modules/electron-updater/out/AppImageUpdater.d.ts
D:/DI/front-end/node_modules/electron-updater/out/MacUpdater.d.ts
D:/DI/front-end/node_modules/electron-updater/out/NsisUpdater.d.ts
D:/DI/front-end/node_modules/electron-updater/out/main.d.ts
D:/DI/front-end/desktop/socketClient.ts
我检查了npm ls——生产,它有电子更新器。
+-- electron-updater@5.2.1
| +-- @types/semver@7.3.12
| +-- builder-util-runtime@9.0.3
| | +-- debug@4.3.4
| | | `-- ms@2.1.2 deduped
| | `-- sax@1.2.4
| +-- fs-extra@10.1.0
| | +-- graceful-fs@4.2.6
| | +-- jsonfile@6.1.0
| | | +-- graceful-fs@4.2.6 deduped
| | | `-- universalify@2.0.0 deduped
| | `-- universalify@2.0.0
| +-- js-yaml@4.1.0
| | `-- argparse@2.0.1
| +-- lazy-val@1.0.5
| +-- lodash.escaperegexp@4.1.2
| +-- lodash.isequal@4.5.0
| +-- semver@7.3.7
| | `-- lru-cache@6.0.0
| | `-- yallist@4.0.0
| `-- typed-emitter@2.1.0
| `-- rxjs@7.5.7
| `-- tslib@2.4.0
问题是您正在排除node_modules
文件夹。要理解为什么这会破坏您的构建,您需要知道node_modules
是存储应用程序的所有依赖项(即package.json
中在dependency
下定义的包(的地方。
因此,当排除此文件夹时,您告诉Electron Builder不要复制应用程序的任何依赖项。因此,将找不到这些模块中的任何一个。
是的,node_modules
会增加你的应用程序的大小,但这是你在应用程序中依赖第三方软件时必须接受的权衡。如果没有任何依赖项将被复制到您的可分发应用程序中,那么就不能使用任何依赖项。
NPM使用npm ls --production
(和TypeScript编译器(告诉您所有这些模块都将包含在内的原因是,就NPM而言,您构建的应用程序不存在。NPM可以在调试(开发(模式和生产模式下运行您的应用程序,这两种模式都不涉及Electron Builder。Electron Builder只需将生产版本打包("构建"(即可进行分发。
(请注意,这不适用于devDependencies
,如Electron。Electron Builder将不包括任何这些依赖项,因为只有当您的应用程序在源代码的调试模式下运行时才需要它们。(