0

我有一个使用electron-forge设置的电子项目。该应用程序在本地运行良好,我正在尝试将其打包以在各种操作系统上分发。但是,当我打包并编译应用程序并尝试运行它时,我收到cannot find module ...如下错误:

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)

我的构建过程如下:

  1. 用于webpack将电子组件捆绑到一个文件中
  2. 打包并编译使用electron-forge

webpack.config.js

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'
      }
    ]
  }
};

forge.config.js

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"
  }
};

我在这里做错了什么?似乎electron.asar构建的不知道如何/在哪里找到某些 node_modules,但我的印象是它们将包含在由webpack.

4

2 回答 2

2

您不能将 webpack 用于通过electron-forge. 这不是不可能的事情,但您需要各种自定义配置才能使其工作。

electron-forge是基于 构建的electron-compile,它在电子过程中注册即时转译钩子。当你通过 electron forge 的预设构建脚本构建包时,它会生成正确的依赖集以及你的模块依赖。electron-compile是其中之一,它是必需的依赖项,但您的 webpack 配置会破坏这些依赖项。

TL:博士;

  1. electron-forge有自己的流量
  2. 运行 webpack 然后 pkg viaforge可以破坏事情。

我建议只采用一种方式(在 webpack 与 forge 之间),自定义混合它对于第一次设置来说不是微不足道的。

于 2017-12-03T07:16:58.093 回答
0

有一个新的 webpack 插件可以与 Electron Forge 一起使用,允许您覆盖 Main 和 Renderer 脚本的基本编译。我自己还没有测试过,因为我还在弄清楚。

Electron Forge 插件 Webpack

于 2018-09-04T11:23:22.907 回答