Soir,
Je cherche à utiliser electron pour empaqueter une construction angular2 existante. Je pensais avoir un bon fonctionnement, mais l'emballage actuel semble être défaillant (voir la dernière étape ci-dessous) et je veux comprendre pourquoi. Voici ce que je fais ...
Créer un projet
Utilisez angular-cli _ pour démarrer un nouveau projet ng new electron-ng2-cli --style=scss
Installez electron et constructeur d'électrons
Editer package.json
Faites les ajouts suivants ..."main": "main.js"
"build":
{
"appId": "com.electrontest.testapp",
"mac": {
"category": "your.app.category.type"
}
}
et ajoutez ce qui suit à la scripts
...
"pack": "build --dir",
"dist": "build",
"electron": "electron main.js",
"postinstall": "install-app-deps"
Créer main.js
Je viens de copier le code du démarrage rapide électronique . La seule modification apportée concerne l'emplacement de index.html
que j'ai défini sur /dist/index.html
Modifier la base
Dans index.html
, changez <base="/">
en <base="./">
Code du pack
Exécutez ng build
. Cela met tout le code empaqueté dans /dist
Essai
Exécutez npm run electron
. Cela fonctionne bien. Une application Electron se déclenche et je vois les trucs angulaires qui y courent.
Créer une application pour la distribution
Exécutez npm run pack
pour créer une application packagée. L'emballage semble aller bien - je reçois un avertissement à propos d'une icône manquante et un avertissement que mon code n'est pas signé mais je suppose qu'ils ne devraient pas être mortels?
Le problème est que, lorsque je lance maintenant l'application en double-cliquant sur Finder
, je reçois une erreur dans la console en disant: Not allowed to load local resource: file:///Users/<username>/Documents/development/electron-ng2-cli/dist/mac/electron-ng2-cli.app/Contents/Resources/app.asar/dist/index.html
npm run electron
?Que puis-je faire pour résoudre ce problème et que l'application fonctionne correctement?
Merci d'avoir réussi jusqu'à la fin. Cela a pris plus de temps que je ne le voulais mais j'espère que je me suis bien expliqué. Si vous pouvez aider ou donner des conseils qui seraient formidables - beaucoup de bonnes vibrations seront pensées dans votre direction générale :)
Salut à tous
Il a fallu beaucoup d'essais et d'erreurs, mais j'ai réussi à faire fonctionner cela. Il y a beaucoup de choses que je ne comprends pas tout à fait, et beaucoup qui pourraient être inutiles ou mauvaises, et tout pourrait tomber à la prochaine étape, mais si, comme moi, vous essayez simplement de surmonter la première bosse, alors Peut-être que quelque chose que j'ai trouvé vous aidera.
J'ai trouvé le problème en décompactant le fichier app.asar
produit par electron-builder
. Au lieu de contenir le code fourni de mon dossier dist
, il contenait tout le code du projet (*.ts *.scss
etc.). Le problème était simplement que les fonctions d'emballage préparaient le mauvais matériel.
Les étapes pour obtenir la bonne source dans l'application finale sont simples lorsque vous les exposez, mais mon dieu, ils n'ont pas à moitié combattu! Partant de là où je me suis arrêté dans ma question initiale, j'ai fait ce qui suit ...
N'oubliez pas que ma structure de projet est celle par défaut définie par angular-cli}
Fichiers spécifiques à l'électron
J'ai déplacé le main.js
dans src
et changé son nom en electron-main.js
juste pour éviter toute confusion avec le main.ts
déjà présent. J'ai également changé le chemin auquel il fait référence en /index.html
.
Ensuite, j'ai créé un nouveau niveau d'application package.json
également dans src
et lui ai donné le contenu suivant:
{
"name": "application-name",
"description": "CLI app",
"author": "Me me me",
"version": "0.0.1",
"main": "electron-main.js"
}
angular-cli.json
J'ai changé le outDir
en build
uniquement parce que électron semble produire le résultat en dist
par défaut et je voulais une séparation à ce stade. Ensuite, j'ai ajouté package.json
et electron-main.js
au tableau assets
.
Main package.json
J'ai enlevé le "main":"main.js"
car il n'est apparemment plus nécessaire ici. Dans scripts
, j'ai modifié la commande de test en electron build
pour qu'elle pointe vers le dossier de construction où se trouve le code fourni.
Enfin, je suis allé dans le champ build
et j'ai ajouté le contenu suivant:
"directories": {
"buildResources": "build",
"app": "build"
}
Cela semble assez évident maintenant. Cela indique simplement au compilateur où rechercher les actifs qui constitueront l'application finale. Il s'agissait par défaut du répertoire de travail et c'était mon problème.
Avec cette configuration, je peux maintenant exécuter ng build
pour regrouper mon projet dans le dossier build
avec les electron-main.js
et package.json
.
Cela fait, je peux exécuter npm run electron
pour lancer rapidement une application de test ou npm run pack
pour créer une application pouvant être lancée à partir de Finder
.
Boom. Travail accompli. Je serai de retour dans 10 minutes avec une autre question ennuyeuse que je m'attends. Je dois aimer le dev ces jours-ci :)
Au cas où cela aiderait quelqu'un, le problème que j'avais était que j'avais le chemin défini avec process.cwd () :
win.loadURL(`file://${process.cwd()}/dist/index.html`);
Ce qui, une fois empaqueté, n’est pas correct car le fichier main.js n’est plus à la racine. Passage à __dirname :
win.loadURL(`file://${__dirname}/dist/index.html`);
Correction du problème pour moi.