Es gibt keine direkte Möglichkeit, dies zu tun. Diese
ist in der Regel eine serverseitige Aufgabe: der Server Sorgfalt auf die erforderlichen HTML zu erzeugen.
Webkomponenten sind alle über Client-Seite, so dass sie arbeiten, was an den Browser des bereits ausgeliefert.
ist jedoch build.dart
Skripte jedesmal, wenn eine Datei in Ihrem Projekt Änderungen ausgeführt, so dass Sie das Skript erweitern können zu bekommen, was Sie wollen. Ich denke nicht, dass dies ein guter Ansatz ist, aber es löst Ihr Problem.
zuerst die folgenden Platzhalter auf das Ziel HTML-Datei (in meinem Fall web/webuitest.html
) hinzufügen:
THIS IS A HEADER
Jetzt erweitern die:
<header></header>
Jetzt mit Inhalt eine header.html
Datei zu Ihrem Projekt hinzufügen build.dart
Skript so wird es überprüfen, ob die header.html
wurde modifiziert, und wenn es war, wird es aktualisiert webuitest.html
:
// if build.dart arguments contain header.html in the list of changed files
if (new Options().arguments.contains('--changed=web/header.html')) {
// read the target file
var content = new File('web/webuitest.html').readAsStringSync();
// read the header
var hdr = new File('web/header.html').readAsStringSync();
// now replace the placeholder with the header
// NOTE: use (.|[\r\n])* to match the newline, as multiLine switch doesn't work as I expect
content = content.replaceAll(
new RegExp("<header>(.|[\r\n])*</header>", multiLine:true),
'<header>${hdr}</header>');
// rewrite the target file with modified content
new File('web/webuitest.html').writeAsStringSync(content);
}
Eine Konsequenz dieses Ansatzes ist, dass das Neuschreiben des Ziels erneut build.dart
auslöst, so dass Ausgabedateien zweimal erstellt werden, aber das ist kein großes Problem.
Natürlich kann dies viel besser gemacht werden, und jemand könnte sogar in eine Bibliothek wickeln.
Nicht sehr hübsch, aber es funktioniert. Vielen Dank. – JJJ
Richtig, es ist hässlich wie Hölle :) Eigentlich habe ich darüber nachgedacht, eine Bibliothek dafür zu bauen, aber ich habe mich dazu entschieden, dies nicht zu tun, da ich es nicht gerne sehen würde. –
@Juhana, BTW, anfangs dachte ich darüber nach, nur die Dateien im 'out'-Verzeichnis neu zu schreiben, aber der Editor überwacht auch diese Dateien (ich denke, es wurde ein Fehler gesendet), so dass es eine unendliche Wiederherstellungsschleife auslöst –