Как собрать разные версии с переменными окружения

В соответствии с этим невозможно установить флаги в электронном приложении. с переменными окружения. Мне все еще нужно создать разные версии приложения для разработки, промежуточной, пилотной и рабочей версии.

Внутри я хотел бы использовать electron-node-config, потому что это просто. Но поскольку у меня нет доступа к переменным окружения, использовать node-config невозможно.

Поэтому я подумал о нескольких входных сценариях, таких как

// index.dev.js
require('./main')({ APP_URL: 'localhost:8080' });

// index.staging.js
require('./main')({ APP_URL: 'https://staging.foo.com' });

// pilot.staging.js
require('./main')({ APP_URL: 'https://pilot.foo.com' });

Где мой файл main.js выглядит более или менее так

module.exports = (config) => {
  app.on('ready', () => {
    mainWindow.loadURL(config.APP_URL);
  });
};

Однако в документах по сборщику электронов, похоже, нет возможности указать файл записи, он всегда использует index.js для упаковки приложения, и в документах для js API мало что написано, кроме

const builder = require('electron-builder');
const env = process.env.NODE_ENV;
const entry = `index.${env}.js`;

builder.build({
  entry,
  appId: 'com.electron.foo',
  productName: 'foo',
  mac: {
    target: 'zip'
  },
  win: {
    target: 'portable'
  },
  portable: {
    artifactName: 'foo.exe'
  }
});

Итак, я попытался настроить свой package.json следующим образом.

"scripts": {
  "build:staging": "NODE_ENV=development node scripts/build",
  "build:pilot": "NODE_ENV=pilot node scripts/build",
  "build:production": "NODE_ENV=production node scripts/build"
}

Однако я действительно не уверен, как установить файл ввода для конфигурации электронного построителя. Как указать файл записи?


person Daniel Lizik    schedule 25.12.2018    source источник
comment
Для новичков должно быть хорошо, если вы ясно объясните в комментариях, что scripts/build на самом деле является вашим build.js. Большое спасибо за это решение   -  person Leonardo Rick    schedule 11.03.2021


Ответы (2)


Вы можете решить эту проблему с помощью electron-build config extraMetadata, вы можете переопределить свойства package.json во время сборки с этим.

const builder = require('electron-builder');
const env = process.env.NODE_ENV;
const entry = `index.${env}.js`;

builder.build({
  config: {
    extraMetadata: {
      main: entry
    },
    appId: 'com.electron.foo',
    productName: 'foo',
    mac: {
      target: 'zip'
    },
    win: {
      target: 'portable'
    },
    portable: {
      artifactName: 'foo.exe'
    }
  }
});
person Yurii Danylevych    schedule 05.02.2020
comment
Как вы это реализуете? в package.json все, что мы добавляем, это сборка. Как перезаписать конфигурацию package.json. - person Sravanthi; 16.06.2021

Я сделал это с помощью взломанного скрипта bash.

#!bin/bash

# make tmp package.json
cp package.json _package.json

# set entry file
sed -i '' "s/index.js/index.$1.js/" package.json

# set output folder
sed -i '' "s/TARGET/$1/" package.json

# package app
npm run build

# get rid of electron config package.json
rm package.json

# "reset" old package.json
mv _package.json package.json

и мои сценарии package.json выглядят так

{
  "postinstall": "electron-builder install-app-deps",
  "reinstall": "rm -rf node_modules/ && npm i",
  "start": "NODE_ENV=development electron src/index.development.js",
  "build": "build -mw",
  "build:development": "sh scripts/build.sh development",
  "build:pilot": "sh scripts/build.sh pilot",
  "build:pilot2": "sh scripts/build.sh pilot2",
  "build:production": "sh scripts/build.sh production",
  "build:all":
    "npm run build:development && npm run build:pilot && npm run build:pilot2 && npm run build:production",
  "test": "npm run postinstall && jest"
}
person Daniel Lizik    schedule 27.12.2018