Webpack 打包的Electron应用程序找不到节点模块
我有一个电子项目,是使用设置。该应用程序在本地运行良好,我正在尝试将其打包,以便在各种操作系统上发布。但是,当我打包并编译应用程序并尝试运行它时,我收到如下错误:Webpack 打包的Electron应用程序找不到节点模块,webpack,electron,electron-packager,electron-forge,Webpack,Electron,Electron Packager,Electron Forge,我有一个电子项目,是使用设置。该应用程序在本地运行良好,我正在尝试将其打包,以便在各种操作系统上发布。但是,当我打包并编译应用程序并尝试运行它时,我收到如下错误:找不到模块…: A JavaScript error occurred in the main process Uncaught Exception: Error: Cannot find module 'electron-compile' at Module._resolveFilename (module.js:470:15
找不到模块…
:
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module 'electron-compile'
at Module._resolveFilename (module.js:470:15)
at Function.Module._resolveFilename (/usr/lib/my-app/resources/electron.asar/common/reset-search-paths.js:35:12)
at Function.Module._load (module.js:418:25)
at Module.require (module.js:498:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/usr/lib/my-app/resources/app/es6-shim.js:4:23)
at Object.<anonymous> (/usr/lib/my-app/resources/app/es6-shim.js:10:3)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
forge.config.js
我做错了什么?似乎构建的
electron.asar
不知道如何/在何处找到某些节点\ u模块,但我的印象是,它们将包含在webpack
创建的捆绑包中,您不能将webpack用于通过electron forge
创建的项目。这不是不可能的事情,但您需要各种自定义配置才能使其正常工作
electron-forge
是基于electron-compile
构建的,它在电子过程中动态注册transfilation-hook。当您通过electron forge的预设构建脚本构建包时,它将生成正确的依赖项集以及模块依赖项electron compile
是其中之一,它是必需的依赖项,但您的网页配置会破坏这些依赖项
TL:DR
electron forge
有自己的流程forge
打包可以破坏东西我建议只采用一种方式(在webpack和forge之间),在第一次安装时,定制混合使用webpack并非易事。您不能将webpack用于通过
electron forge
创建的项目。这不是不可能的事情,但您需要各种自定义配置才能使其正常工作
electron-forge
是基于electron-compile
构建的,它在电子过程中动态注册transfilation-hook。当您通过electron forge的预设构建脚本构建包时,它将生成正确的依赖项集以及模块依赖项electron compile
是其中之一,它是必需的依赖项,但您的网页配置会破坏这些依赖项
TL:DR
electron forge
有自己的流程forge
打包可以破坏东西我建议只采用一种方法(在webpack和forge之间),定制混合它对于第一次安装来说并不简单。有一个新的webpack插件,可以与Electron forge一起使用,允许您覆盖主脚本和渲染器脚本的基本编译。我还没有亲自测试过,因为我还在想办法
有一个新的网页包插件,可以与Electron Forge一起使用,允许您覆盖主脚本和渲染器脚本的基本编译。我还没有亲自测试过,因为我还在想办法
我理解你的意思,这可能意味着我将转而使用
electron builder
。electron生态系统是由可选依赖项和配置组成的真正的蜘蛛网,我对它越来越不抱幻想了。谢谢您的回答。您可以直接使用forge所依赖的electron packager
,而不是使用electron forge进行包装。您尝试在配置中使用forge很重要,直接使用electron packager
应该可以工作。问题实际上是electron packager
,尤其是windows installer
依赖性。我的问题与此错误有关:。推荐的解决方法是使用webpack
或bundlejs
,这就是我最初的SO问题。我理解你的意思,这可能意味着我将转而使用electron builder
。electron生态系统是由可选依赖项和配置组成的真正的蜘蛛网,我对它越来越不抱幻想了。谢谢您的回答。您可以直接使用forge所依赖的electron packager
,而不是使用electron forge进行包装。您尝试在配置中使用forge很重要,直接使用electron packager
应该可以工作。问题实际上是electron packager
,尤其是windows installer
依赖性。我的问题与此错误有关:。推荐的解决方法是使用类似于webpack
或bundlejs
的东西,这就是我最初遇到SO问题的原因。
const path = require('path');
const webpack = require('webpack');
module.exports = {
target: 'electron-main',
resolve: {
extensions: ['.js']
},
entry: [`${__dirname}/src/main.js`],
output: {
path: `${__dirname}/dist`,
filename: 'main.js'
},
module: {
exprContextCritical: false,
rules: [
{
exclude: /node_modules/,
test: /.(ui.js|s?css|html|png|jpe?g|ico|svg)$/,
use: 'ignore-loader'
}
]
}
};
const path = require('path');
module.exports = {
"make_targets": {
"win32": ["squirrel"],
"linux": ["deb"]
},
"electronPackagerConfig": {
"dir": 'dist',
"ignore": [
"src/scss",
".*scss",
"README.md",
".gitignore",
".nvmrc",
"gulpfile.js",
"forge.config.js"
]
},
"electronInstallerDebian": {
"icon": {
"scalable": path.join(__dirname, 'src/assets/icons/debian/Icon.svg')
},
"productName": "MyProduct"
},
"electronWinstallerConfig": {
"iconUrl": path.join(__dirname, 'src/assets/icons/windows/Icon.ico'),
"name": "MyProduct"
}
};