EDIT:Można również pominąć to wszystko i po prostu hit Ctrl + R w edytorze. Poniższy skrypt może być nadal przydatny, jeśli używasz narzędzi poza edytorem Dart (ale wciąż polegasz na nim w procesie tworzenia) lub chcesz kodować i wyświetlać podgląd bez przełączania ostrości do okna Dartium.
Wyciśnij klawisze i zautomatyzuj swoje małpy!
Ta technika używa pliku dart.build do "dotknięcia" pliku HTML za każdym razem, gdy wprowadzisz zmianę do projektu, a następnie korzysta z rozszerzenia LivePage, aby odświeżyć je w przeglądarce.
Podpisz Dartium i zainstaluj rozszerzenie LivePage. (Ustawienia | Rozszerzenia | Pobierz więcej rozszerzeń | Livepage z www.fullondesign.co.uk | Dodaj do Chrome)
Uruchom projekt. Przeglądając swoją stronę w Dartium, kliknij ikonę strony na żywo. Pojawi się czerwona nakładka "Na żywo". Oznacza to, że LivePage obserwuje plik html i jego zasoby (np. Plik css) w poszukiwaniu zmian.
Testuj, dokonując szybkiej zmiany w pliku html i zapisując go. Strona w Dartium powinna zostać zaktualizowana.
Tworzenie build.dart plik w tym samym katalogu, co plik projektu pubspec.yaml. Program Dart Editor będzie uruchamiał ten plik za każdym razem, gdy wprowadzisz zmiany w projekcie (np. Po zapisaniu zmian w dowolnym z plików .dart).
Wpisz poniższy kod w pliku build.dart. Zaktualizuj 'web/yourpage.html'
, aby wskazać plik HTML monitorowany przez usługę LivePage.
Teraz zmień jeden z plików .dart, zapisz go i obejrzyj magię.
W skrócie: Zapisz kodu ▶ Dart Editor wyzwala build.dart ▶ dotyka html plików ▶ Livepage odświeża Dartium
import 'dart:io';
// This number needs to be high enough to prevent the Dart Editor from going
// into an "infinite compile" loop. If that happens, simply comment out the
// call to touch() below and save this file.
const int MIN_INTERVAL_MS = 5000;
const String HTML_FILE = 'web/yourpage.html';
void main() {
build(new Options().arguments, [HTML_FILE]);
touch(HTML_FILE, new Duration(milliseconds:MIN_INTERVAL_MS));
}
/// Save a small, trivial change to the contents of [filename], unless
/// its already been modified within the last [interval].
void touch(String filename, [Duration interval]) {
const int SPACE = 32;
var file = new File(filename);
if (?interval &&
new Date.now()
.difference(file.lastModifiedSync())
.inMilliseconds < interval.inMilliseconds) return;
RandomAccessFile f = file.openSync(FileMode.APPEND);
try {
// If the file doesn't end with a space, append one, otherwise remove it
int length = f.lengthSync();
f.setPositionSync(length - 1);
if (f.readByteSync() == SPACE) {
f.truncateSync(length - 1);
} else {
f.writeByteSync(SPACE);
}
} finally {
f.closeSync();
}
}
Jeśli trzeba rozwiązać, można uruchomić dart build.dart
z linii poleceń .
Funkcja dodaje lub usuwa końcowe miejsce na końcu pliku. Uwaga: LivePage nie wydaje się nic robić, jeśli zmienisz datę modyfikacji.
Ponieważ edytor Dart zawsze monitoruje twoje pliki, odbiera zmianę wprowadzoną przez build.dart, idź "Hej, ten projekt właśnie się zmienił" i ponownie wywołaj build.dart ... i znowu ... i jeszcze raz. Aby uniknąć nieskończonych pętli , skrypt dotyka pliku tylko wtedy, gdy jest nieaktualny przez co najmniej MIN_INTERVAL_MS
.
LivePage posiada funkcję, która dyskretnie "ponownie wstrzykuje" fragmenty kodu CSS i JavaScript, gdy się zmieniają, bez wymuszania odświeżenia całej strony. Niestety zastosowana tutaj technika brute force (tj. Nadpisanie pliku html) zastępuje to zachowanie.
Ludzie z Dart oferują również stronę web_ui, która mówi o oprzyrządowaniu, ale zauważ, że nie musisz instalować pakietu web_ui, aby build.dart działał.
mam odpowiedzi na moje własne pytanie poniżej, ale chętnie przyjąć lepsze podejście. – rkagerer