Ich implementiere ein Feature in unserer Ember-App mit Web-Mitarbeitern und habe Probleme herauszufinden, wie man die Worker-Quelle verpacken soll.Packing-Web-Worker-Quelle zur Verwendung mit Ember.js
Mein erster Ansatz war worker.js
in das assets
Verzeichnis zu platzieren, aber in unserer Konfiguration werden die Vermögenswerte von einem anderen Server in der Produktion bedient, und wir bekommen die Fehler:
Failed to construct Worker: Script at https://static-assets.foo.com cannot be accessed from origin https://app.foo.com
Ich habe versucht, mit document.domain
futzing (Ändern Sie es in foo.com
), aber der Fehler bleibt bestehen.
Ich fragte mich, ob ich ember-cli-build.js
(aka Brocfile.js
) ändern könnte eine andere JS Bündel zusätzlich zu app.js
und vendor.js
(sagen wir, worker.js
) zu schaffen, die wie die in der gleichen Position eingesetzt werden würde, und mit einem gebracht werden konnte <script>
Markierung in index.html
. Ich bin jedoch nicht in der Lage, herauszufinden, wie dies zu tun ist, entweder aufgrund der app.js/vendor.js
Logik, die in ember-cli
verbrannt wird, oder meiner Unkenntnis von Brokkoli.
Als nächstes dachte ich über die Erstellung der Worker von einem Blob. Die Frage ist, wo die Quelle für den Blob gespeichert werden soll. Ich überlegte, die Quelle für den Blob in ein nicht standardmäßiges <script>
-Tag in index.html
zu platzieren, von wo ich es abrufen und den Blob erstellen konnte. Ich möchte die Worker-Quelle nicht direkt in index.html
einfügen, also dachte ich, broccoli-replace
zu verwenden, aber die Worker-Quelle ist in ES6 geschrieben und muss transpiliert werden. Ich überlegte, ein Glut-Add-on zu verwenden, das es ermöglicht, Dinge in index.html
mit {{content-for}}
einzufügen, aber das erfordert, dass ich den einzufügenden Text angeben, und ich weiß nicht, woher ich es bekommen kann, und das Problem der Umblätterung bleibt.
Ich betrachtete dann einige sehr klujy Lösungen wie Wrapping der Worker-Quelle in einer Funktion, und dann Stringing die Funktion und Extrahieren des Körpers (zwischen {}
) zur Laufzeit. Das funktioniert, aber der Gestank ist ein wenig überwältigend, und ich kann keine ES6-Konstrukte wie Spread-Operatoren oder Array-Destrukturierung verwenden, die dazu führen, dass Babel seine kleinen Laufzeit-Utilities wie aufruft.
Irgendwelche vernünftigen Lösungen oder Wege, irgendwelche der oben genannten Ansätze zu arbeiten?
Was ist mit der Einstellung cors Skript von 'app.foo.com 'zu erlauben? –