首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用“电子锻造制造-平台= when 32”构建电子应用程序时重用平台参数?

如何在使用“电子锻造制造-平台= when 32”构建电子应用程序时重用平台参数?
EN

Stack Overflow用户
提问于 2021-06-21 04:24:07
回答 2查看 1.1K关注 0票数 0

我们正在为macos、linux和windows构建一个电子桌面应用程序。

这是我们的电子锻造配置:

代码语言:javascript
复制
// forge.config.js
const os = require('os')

const package = require('./package.json')

function getExtraResource() {
  const p = os.platform()
  switch (p) {
    case 'darwin':
      return ['./static/bin/pasteld-mac']
    case 'linux':
      return ['./static/bin/pasteld-linux']
    case 'win32':
      return ['./static/bin/pasteld-win.exe']
    default:
      throw new Error(
        'forge.config.js error: your OS is not supported. Supported OS are: darwin, linux, win32',
      )
  }
}

function getIcon() {
  const p = os.platform()
  switch (p) {
    case 'darwin':
      return './static/icons/icon.icns'
    case 'linux':
      return './static/icons/icon.png'
    case 'win32':
      return './static/icons/icon.ico'
    default:
      throw new Error(
        'forge.config.js error: your OS is not supported. Supported OS are: darwin, linux, win32',
      )
  }
}

module.exports = {
  packagerConfig: {
    name: package.productName,
    executableName: package.name,
    icon: getIcon(),
    asar: true,
    extraResource: getExtraResource(),
    protocols: [
      {
        protocol: package.name,
        name: package.name,
        schemes: [package.protocolSchemes.native],
      },
    ],
  },
  makers: [
    {
      name: '@electron-forge/maker-squirrel',
      config: {
        exe: `${package.name}.exe`,
        setupIcon: './static/icons/icon.ico',
        loadingGif: './static/icons/icon.gif',
        iconUrl:
          'https://raw.githubusercontent.com/pastelnetwork/pastel-electron-wallet/master/static/icons/icon.ico',
        title: package.productName,
        setupExe: `${package.productName} Setup - v${package.version}.exe`,
        skipUpdateIcon: true,
      },
    },
    {
      name: '@electron-forge/maker-dmg',
      config: {
        icon: './static/icons/icon.icns',
        name: package.productName,
      },
    },
    {
      name: '@electron-forge/maker-deb',
      config: {
        options: {
          icon: './static/icons/icon.png',
        },
      },
    },
  ],
  plugins: [
    [
      '@electron-forge/plugin-webpack',
      {
        mainConfig: './webpack.main.config.js',
        renderer: {
          config: './webpack.renderer.config.js',
          entryPoints: [
            {
              html: './src/index.html',
              js: './src/renderer.tsx',
              name: 'main_window',
            },
          ],
        },
      },
    ],
  ],
}

正如您在上面的文件中所看到的,getExtraResource()检测os类型并根据它选择正确的可执行文件。换句话说,在适当的平台上运行run make是我们构建应用程序所需要的全部。

然而,我们现在将在linux映像上构建windows安装程序,更具体地说,使用electronuserland/builder:wine-mono映像。到目前为止,除了一件事之外,一切都在正常工作--我们仍然需要在getExtraResource()中的开关子句中添加一个步骤来选择构建器映像中的windows可执行文件,而不是linux可执行文件(注意构建器映像仍然是一个linux映像!)。

会是这样的:

代码语言:javascript
复制
# forge.config.js
//...

function getExtraResource() {
  const p = os.platform()
  switch (p) {
    case 'darwin':
      return ['./static/bin/pasteld-mac']
    case 'linux':
      if (build_arg === 'win32') {
        return ['./static/bin/pasteld-win.exe']
      }
      return ['./static/bin/pasteld-linux']
    case 'win32':
      return ['./static/bin/pasteld-win.exe']
    default:
      throw new Error(
        'forge.config.js error: your OS is not supported. Supported OS are: darwin, linux, win32',
      )
  }
}

//...

如何在上面的文件中获得build_arg

构建命令是葡萄酒构建器映像中的yarn make --platform=win32

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-26 03:31:03

我们可以通过使用process.argv来解决这个问题。

更具体地说,我们运行此命令在linux容器中构建windows安装程序:

代码语言:javascript
复制
yarn make --platform=win32

win32字符串可以被process.argv[3]在任何地方捕获。

请参阅详细的实现这里

如果你有更好的解决方案,请提出建议!

票数 0
EN

Stack Overflow用户

发布于 2021-06-21 10:29:09

电子锻造支持钩子,其中一些通过平台和拱门,你可以拯救全球。

目前,获得传递的最早的钩子是packageAfterCopy,它可能会被调用得太晚,但值得一试:

代码语言:javascript
复制
  plugins: [
     // ...
  ],
  hooks: {
    packageAfterCopy: async (
      forgeConfig,
      buildPath,
      electronVersion,
      platform,
      arch
    ) => {
      console.log(buildPath, electronVersion, platform, arch);
    },
  }
}

我还使用开了个公关将这些参数添加到generateAssets钩子中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68062288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档