我遇到了找不到模块电子更新程序错误。
我安装了电子更新程序到依赖项。
"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 选项获取的日志。正如您可以在日志中看到的,在构建时,找到了 electro-updater。 但为什么运行时找不到模块呢?
======== 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 --product,它有 Electron-updater。
+-- [email protected]
| +-- @types/[email protected]
| +-- [email protected]
| | +-- [email protected]
| | | `-- [email protected] deduped
| | `-- [email protected]
| +-- [email protected]
| | +-- [email protected]
| | +-- [email protected]
| | | +-- [email protected] deduped
| | | `-- [email protected] deduped
| | `-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| | `-- [email protected]
| | `-- [email protected]
| `-- [email protected]
| `-- [email protected]
| `-- [email protected]
问题是您排除了
node_modules
文件夹。要理解为什么这会破坏您的构建,您需要知道 node_modules
是存储所有应用程序依赖项(即 dependency
中 package.json
下定义的包)的位置。
因此,当排除此文件夹时,您是在告诉 Electron Builder 不要复制应用程序的任何依赖项。因此,将找不到这些模块。
是的,
node_modules
会增加应用程序的大小,但这是在应用程序中依赖第三方软件时必须接受的权衡。如果没有任何依赖项会被复制到您的可分发应用程序中,则任何依赖项都无法使用。
NPM 通过
npm ls --production
(和 TypeScript 编译器)告诉您所有这些模块将被包含在内的原因是,就 NPM 而言,您构建的应用程序不存在。 NPM 可以在调试(开发)模式和生产模式下运行您的应用程序,这两种模式都不涉及 Electron Builder。 Electron Builder 只需为您提供生产版本并将其打包(“构建”)以进行分发。
(请注意,这不适用于
devDependencies
,例如 Electron。Electron Builder 不会包含任何这些依赖项,因为只有当您的应用程序从其源代码在调试模式下运行时才需要它们。)
在我的应用程序中,有两个 package.json 文件,一个用于 Electron,一个用于 Angular。我给它们添加了电子更新器。并且有效!