代码之家  ›  专栏  ›  技术社区  ›  Daniel Lizik

如何使用环境变量构建不同的版本

  •  0
  • Daniel Lizik  · 技术社区  · 7 年前

    this 无法使用环境变量在electron应用程序中设置标志。我仍然需要为dev、staging、pilot和prod构建不同版本的应用程序。

    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 要打包应用程序,文档中除了

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

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

    但是,我真的不知道如何设置electron builder配置的条目文件。如何指定条目文件?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Yurii Danylevych    6 年前

    你可以用计算机来解决这个问题 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'
        }
      }
    });
    
        2
  •  1
  •   Daniel Lizik    7 年前

    我是用一个骇人的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"
    }