Я пытаюсь создать приложение Angular 8, размещенное в Electron. Моя структура продукта выглядит следующим образом:
-прямоугольный клиент
- package.json
- main.js
- src
--- app / index.js
package.json:
{
"name": "my-app",
"version": "0.0.0",
"main": "main.js",
"scripts": {
"ng": "ng",
"start": "ng serve --host 0.0.0.0",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"start-electron": "ng build --base-href ./ && electron .",
"electron-build-win": "ng build && electron-packager . --x64 --overwrite"
},
"private": true,
"dependencies": {
"@angular/animations": "~8.2.11",
"@angular/common": "~8.2.11",
"@angular/compiler": "~8.2.11",
"@angular/core": "~8.2.11",
"@angular/forms": "~8.2.11",
"@angular/platform-browser": "~8.2.11",
"@angular/platform-browser-dynamic": "~8.2.11",
"@angular/router": "~8.2.11",
"copyfiles": "^2.1.1",
"core-js": "^2.6.9",
"electron-service": "^1.0.10",
"gsap": "^2.1.3",
"jasmine": "^3.5.0",
"moment": "^2.24.0",
"ngx-electron": "^2.1.1",
"ngx-markdown": "^8.2.0",
"rxjs": "^6.5.3",
"tslib": "^1.10.0",
"uuid": "^3.3.3",
"xml2js": "^0.4.22",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.803.9",
"@angular/cli": "~8.3.9",
"@angular/compiler-cli": "~8.2.11",
"@angular/language-service": "~8.2.11",
"@types/jasmine": "~2.8.8",
"@types/jasminewd2": "^2.0.8",
"codelyzer": "^5.0.1",
"electron": "^6.0.11",
"electron-packager": "^14.1.0",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.0.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "^2.0.6",
"karma-jasmine": "~1.1.2",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.11.0",
"typescript": "~3.5.3"
}
}
main.js:
const { app, BrowserWindow, ipcMain } = require('electron');
let win;
function createWindow() {
// creates the browser window
win = new BrowserWindow({
width: 1920,
height: 1080,
backgroundColor: '#fff',
webPreferences: {
nodeIntegration: true
}
//frame: false // remove menu bar
})
win.loadFile(`./dist/index.html`);
// uncomment below to open the DevTools
win.webContents.openDevTools();
console.log('dev tools open');
// cleanup
win.on('closed', function() {
win.removeAllListeners();
win = null
})
}
У меня есть куча данных для загрузки при запуске приложения, поэтому мой app.component перенаправляет на home.component, где у меня есть преобразователь, настроенный для загрузки данных перед перенаправлением. Я прочитал, что для того, чтобы index.html мог перенаправить на другой компонент, мне нужно удалить base href = "./" из index.html и использовать hashLocationStrategy в моем app.module.ts.
Пока что все это работает. Я могу открыть файл index.html самостоятельно и загрузить страницу, выполнив команду package.json "start-Electron", работает отлично, и даже отладка в VSCode работает хорошо.
Проблема, однако, заключается в том, что я запускаю «Electron-build-Win» (используя электронный упаковщик). Он открывает Electron, но страница застряла в index.html вместо index.html / # / home , как и другие методы. Есть ли кто-то, что мне нужно сделать по-другому, чтобы заставить электронный упаковщик запустить это? или я делаю что-то неправильно, что я должен изменить?
Спасибо!