経緯
electron にて ビルドするのに electron-builder を使用してみた
その際に最低限 Lint
, UnitTest
を通ることを担保するようにしたため備忘録として残しておく
構築環境
electron: 5.0.1
electron-builder: 20.39.0
実際のコード
package.json
に以下の定義がしてある前提
※以下は electron x angular(Angular Cli で生成)
{
・・・
"scripts": {
"ng": "ng",
"start": "ng build --prod && electron .",
"build": "ng build",
"test": "jest",
"lint": "ng lint",
"postinstall": "electron-builder install-app-deps",
"release": "ng build --prod && node build.js",
},
・・・
}
electron-builder のオプションについては公式を参照
'use strict';
const builder = require('electron-builder');
const Platform = builder.Platform;
const childProcess = require('child_process');
const unitTest = new Promise((resolve, reject) => {
childProcess.exec('yarn test', (error, stdout) => {
if (error) {
// エラー時は例外を投げる
reject(new Error(stdout + error));
}
resolve('UnitTest OK!');
});
});
const lint = new Promise((resolve, reject) => {
childProcess.exec('yarn lint', (error, stdout) => {
if (error) {
// エラー時は例外を投げる
reject(new Error(stdout + error));
}
resolve('Lint OK!');
});
});
const build = () => {
builder
.build({
targets: Platform.WINDOWS.createTarget(),
config: {
directories: {
output: 'release',
buildResources: 'dist',
},
productName: 'Example App',
files: ['**/*', 'dist/**/*'],
win: {
target: [
{
target: 'nsis',
arch: ['x64'],
},
],
},
nsis: {
createDesktopShortcut: 'always',
},
},
})
.then(() => {
console.log('Build OK!');
})
.catch((error) => {
console.log(error);
});
};
Promise.all([lint, unitTest])
.then((values) => {
console.log(values.join('\n'));
build();
})
.catch((error) => {
console.log(error.message);
});