Seit webassets won't work on GAE eine js/css im laufenden Betrieb zu komprimieren, scheint es der beste Ansatz, es bei der Bereitstellung zu tun.Wie kann man js/css in der Google App Engine minimieren und versionieren?
Nach viel googeln kam ich mit dem Skript unten, um dies zu erreichen.
Zuerst dachte ich, das Beste wäre, den JavaScript-Pfad in base.html
zu lassen, wie es ist, und einfach komprimieren Sie die CSS/JS.
cssmin komprimiert das CSS und überschreibt das Original. Die Schließung erlaubt jedoch kein Überschreiben des Originals und dieses Konzept schlägt bereits fehl.
Das zweite Problem ist, auch wenn ich Schließung die ursprüngliche Datei überschreiben, Caching wird ein Problem sein. Aus diesem Grund sollte jede Implementierung von minimierten css/js mit einer Zufallszahl im Dateinamen versehen sein, so dass die neuen Versionen nach einer neuen Bereitstellung tatsächlich übernommen werden. Mit dem Konzept, das ich mir ausgedacht habe, wird dies jedoch nicht möglich sein.
Die einzige Möglichkeit, dies zu erreichen, wäre die base.html
mit sed
oder etwas ändern.
Bevor ich das Rad neu erfinde, gibt es einen besseren Ansatz, dies zu tun? Vielen Dank
import sys, os
import cssmin
def main():
if len(sys.argv) == 1:
return
appId = sys.argv[1]
print "appId", appId
cmd = r'java -jar compiler.jar --js=/src/application/static/f11/f11.js --js_output_file=/src/application/static/f11/f11.min.js'
os.system(cmd)
output = cssmin.cssmin(open('/src/application/static/f11/f11.css').read())
f = open('/src/application/static/f11/f11.css','w')
f.write(output)
# Perform appcfg.py to update GAE server
cmd = r'"\google_appengine\appcfg.py"'
os.system(cmd + " update . " + " -A %s"%appId)
if __name__ == "__main__":
main()
Gibt es einen bestimmten Grund dafür, css/js nicht mit Kommandozeilen-Tools zu komprimieren und dann ein kleines Bash-Skript zu haben, um den Deployment-Prozess zu erledigen? Mein Deployment-Skript besteht sowohl aus der Minimierung der css/js, die ich verwende, als auch dem Ausführen des 'appcfg'-Befehls. – dlebech
In der Entwicklung benötigen Sie die unkomprimierten Assets und für die Produktion benötigen Sie sie komprimiert. Ändern Sie den Pfad zu Ihren Assets manuell von .js zu .min.js? Und wie gehst du mit der Versionierung um? – Houman
Ich habe [meine Bereitstellungs-/Entwicklungsskripts hier geteilt] (https://gist.github.com/dlebech/5846132). In meinem HTML referenziere ich immer die .min.js Dateien und dann habe ich ein Skript für die Entwicklung (run_debug.sh) und eines für die Bereitstellung (deploy.sh). Beide verwenden das Skript compile.sh, das sich in meinem statischen Ordner befindet. Es kopiert entweder nur die Entwicklung css/js in die .min-Datei oder es führt tatsächlich eine Verkleinerung durch. Ich weiß nicht, ob das hilfreich ist, aber das ist zumindest, wie ich es zum Laufen bringe :-) – dlebech