如何使用环境变量构建不同的版本
How to build different versions with environment variables
根据 this,不可能在带有环境变量的电子应用程序中设置标志。我仍然需要为开发、暂存、试点和生产构建不同版本的应用程序。
在内部我想使用 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);
});
};
但是electron builder docs里面好像没有指定入口文件的选项,都是用index.js
来打包app,文档里面写的不多对于 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"
}
但是我真的不确定如何设置电子生成器配置的入口文件。如何指定入口文件?
我是用一个 hacky bash 脚本做的
#!bin/bash
# make tmp package.json
cp package.json _package.json
# set entry file
sed -i '' "s/index.js/index..js/" package.json
# set output folder
sed -i '' "s/TARGET//" 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"
}
您可以使用 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'
}
}
});
根据 this,不可能在带有环境变量的电子应用程序中设置标志。我仍然需要为开发、暂存、试点和生产构建不同版本的应用程序。
在内部我想使用 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);
});
};
但是electron builder docs里面好像没有指定入口文件的选项,都是用index.js
来打包app,文档里面写的不多对于 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"
}
但是我真的不确定如何设置电子生成器配置的入口文件。如何指定入口文件?
我是用一个 hacky bash 脚本做的
#!bin/bash
# make tmp package.json
cp package.json _package.json
# set entry file
sed -i '' "s/index.js/index..js/" package.json
# set output folder
sed -i '' "s/TARGET//" 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"
}
您可以使用 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'
}
}
});