electron 找不到模块电子更新程序

ar7v8xwq  于 2022-12-16  发布在  Electron
关注(0)|答案(1)|浏览(422)

我遇到了找不到模块电子更新程序错误。

  • 电子生成器版本:22.11.7
  • 节点版本:14.17.4
  • 电子版: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

我查了国家预防机制的生产部,它有电子更新器。

+-- 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
oaxa6hgo

oaxa6hgo1#

问题是你排除了node_modules文件夹,要理解为什么这会破坏你的构建,你需要知道node_modules是你的应用程序的所有依赖项(即在package.json中的dependency下定义的包)存储的地方。
因此,排除此文件夹时,您将告知Electron Builder * 不要复制应用的任何依赖项 *。因此,将不会找到任何模块。
是的,node_modules会增加你的应用的大小,但这是你在应用中依赖第三方软件时必须接受的权衡。如果没有任何依赖项将被复制到你的可分发应用中,则任何依赖项都无法使用。
NPM告诉你npm ls --production(和TypeScript编译器)将包含所有这些模块的原因是,就NPM而言,你构建的应用程序并不存在。NPM可以在调试(开发)模式和生产模式下运行你的应用程序,这两种模式都不涉及Electron Builder。Electron Builder只是把你的生产版本和打包(“构建”)它用于分发。
(Note这不适用于devDependencies,如Electron。Electron Builder将不包含任何此类依赖项,因为只有当您的应用在调试模式下从其源代码运行时才需要这些依赖项。

相关问题