Ich habe eine Bare-Metal-Anwendung läuft auf einem winzigen 16-Bit-Mikrocontroller (St10) mit 10BASE-T Ethernet (CS8900) und eine Tcp/IP-Implementierung basierend auf dem EasyWeb-Projekt.Wie stelle ich eine Website als einzelne Datei zur Verfügung?
Es ist ein winziger Webserver zum Anzeigen von Statusinformationen des Geräts und zum Ändern von Einstellungen usw. verfügbar.
Für den Browser-Zugriff liefert der Webserver einige Dateien wie index.html
, *.css
, *.js
, *.svg
, *.png
und so weiter.
Da das Bare-Metal-Ziel keine Speichermedien wie eine SD-Karte hat, lege ich alle oben genannten Ressourcen in die kompilierte Binärdatei.
Für Daten speichern und Verkehr zu reduzieren, habe ich alle Dateien in eine einzige index.html
Kompresse, die gzip
und mein Webserver liefert diese Content-Encoding: gzip
mit verwenden.
Der Schritt, um alle Dateien in einzelne index.htm
zusammen zu setzen, ist derzeit manuelle Arbeit (inkl. Ersetzen von Dateinamen Referenzen usw.). Könnte es ein Werkzeug geben, das das automatisch macht?
Oder alternativ, kann ich nur zip/tar/was auch immer alle Dateien in eine einzige Datei und liefern diese auf http GET /
Anfrage?
bearbeiten 2017-10-05
gelöst durch die inliner von brain99 erwähnt werden.
mit kleinen Schwierigkeiten macht es auf Kubuntu 16.04 Host laufen, aber es endgültig fixiert durch die Installation:
sudo apt-get install nodejs
sudo ln -sT "$(which nodejs)" /usr/local/bin/node
sudo apt-get install npm
sudo npm install -g inliner
Vielleicht, ich habe von der Symlink befreien würde durch die Verwendung nodejs-legacy
statt nodejs
(noch nicht ausprobiert). Nachdem installiert, dass ich muss nur laufen:
inliner index.html >index-backed.html
gzip -c index-backed.html >index.html.gz
funktioniert für Sie eine einzige [go] (https://golang.org) binäre Web-Server und enthält auch Ihren statischen Inhalt? – nbari
Hmm, ich hätte bereits eine http-Serverimplementierung inkl. Benutzerverwaltung, Digest-Zugangsauthentifizierung, Sitzungsverwaltung, dynamische Inhaltserzeugung (z.B. Gerätezustand als Yaml) und so weiter. Der Go-Ansatz klingt nach einer Erneuerung aller von ihnen, nicht wahr? – Joe
Ja, also vielleicht nicht das, wonach Sie suchen, denn wie Sie es richtig erwähnen, wird es bedeuten, alles neu zu machen. – nbari