tag:forum.selfhtml.org,2005:/self Node.js und Firebase – SELFHTML-Forum 2021-04-01T11:23:08Z https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786682#m1786682 Casablanca 2021-03-31T18:53:55Z 2021-03-31T19:56:25Z Node.js und Firebase <p>Hi,</p> <p>kennt sich hier jemand mit node.js und firebase aus? Ich bekomme beim deployen von async Funktionen diese Fehlermeldung: "Parsing error: Unexpected token =>"</p> <p>Danke</p> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786683#m1786683 Staufer 2021-04-01T05:44:43Z 2021-04-01T05:44:43Z Node.js und Firebase <blockquote> <p>Hi,</p> <p>kennt sich hier jemand mit node.js und firebase aus? Ich bekomme beim deployen von async Funktionen diese Fehlermeldung: "Parsing error: Unexpected token =>"</p> </blockquote> <p>Bei SO hast Du wsl schon geschaut.</p> <p>Hier gibt's was für ESLint: <a href="https://github.com/eslint/eslint/issues/8126" rel="noopener noreferrer">Error with async: "Parsing error: Unexpected token =>" </a></p> <p><em>Async functions are an ES2017 (or "ES8") feature, but you have ecmaVersion: 7 in your config. To fix this, you should use ecmaVersion: 8 or ecmaVersion: 2017 in your config.</em></p> <p>Mfg Staufer</p> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786685#m1786685 Casablanca 2021-04-01T07:54:02Z 2021-04-01T07:54:02Z Node.js und Firebase <p>Hallo Staufer,</p> <p>vielen Dank. Das war es. Ich habe gestern den halben Tag mit diesem Problem herumhantiert. Ich verstehe nicht, warum node.js/Firebase mit so etwas substanziellem wie async Probleme haben müssen.</p> <p>LG</p> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786689#m1786689 dedlfix 2021-04-01T08:56:18Z 2021-04-01T08:56:18Z Node.js und Firebase <p>Tach!</p> <blockquote> <blockquote> <p>Ich bekomme beim deployen von async Funktionen diese Fehlermeldung: "Parsing error: Unexpected token =>"</p> </blockquote> <p>Bei SO hast Du wsl schon geschaut.</p> <p>Hier gibt's was für ESLint: <a href="https://github.com/eslint/eslint/issues/8126" rel="noopener noreferrer">Error with async: "Parsing error: Unexpected token =>" </a></p> </blockquote> <p>Das unexpected Token ist aber nicht async, sondern der Fat Arrow. Dass der Fehler im Zusammenhang mit async auftritt, ist eher Zufall. Wahrscheinlich werden in seinem Code nur dort Arrow Function Expressions verwendet.</p> <blockquote> <p><em>Async functions are an ES2017 (or "ES8") feature, but you have ecmaVersion: 7 in your config. To fix this, you should use ecmaVersion: 8 or ecmaVersion: 2017 in your config.</em></p> </blockquote> <p>Vermutlich hatte er ES5 voreingestellt, das wäre ein üblicher Wert, weil damit auch ältere Systeme noch zurechtkommen. Arrow Function Expressions kamen bereits mit ES6/ES2015.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786687#m1786687 Rolf B 2021-04-01T08:15:55Z 2021-04-01T08:15:55Z Node.js und Firebase <p>Hallo Casablanca,</p> <p>ich hatte mich zurückgehalten, weil ich nur vage Vermutungen anstellen konnte und deinen Workflow nicht kenne.</p> <p>Aber wenn ich das jetzt richtig lese, kommt die Meldung von ESLint, und dem musst Du schon sagen, welche Sprachstufe er prüfen soll. So ein Tool soll ja Fehler finden, die sonst erst zur Laufzeit auffallen würden.</p> <p>Async gehört zu ECMAScript 2017 (sagt auch <a href="https://kangax.github.io/compat-table/es2016plus/" rel="nofollow noopener noreferrer">Kangax</a>) und gerade bei node.js laufen noch viele Alt-Server herum. Deswegen mag es sinnvoll sein, dass dieser Sprachlevel per Default aus ist und Du ihn explizit aktivieren musst.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786688#m1786688 Casablanca 2021-04-01T08:31:22Z 2021-04-01T08:31:22Z Node.js und Firebase <p>Hallo Rolf,</p> <p>danke für deine hilfreiche Erklärung.</p> <p>Ich bin alleine nicht darauf kommen können, zumal die Fehlermeldung für mich als Starter nicht eindeutig war. Ich wusste nämlich nicht genau, ob ich da was falsch programmiert habe, oder darf ich an dieser Stelle überhaupt kein async einsetzen.</p> <p>LG</p> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786690#m1786690 Rolf B 2021-04-01T08:59:46Z 2021-04-01T08:59:46Z Node.js und Firebase <p>Hallo Casablanca,</p> <p>ja, die Fehlermeldung ist totaler Blödsinn. Pfeilfunktionen gibt's schon so lange, dass sie beinahe schon im IE funktionieren (aber nur beinahe), insofern ist nicht verständlich warum er sich über => aufregt.</p> <p>Aber wenn Du ihm sagst:</p> <p><code>let stupid = async (x) => x+1;</code></p> <p>und einen JS Parser dran lässt, dem man nichts von async verraten hat, dann denkt der, dass da eine Funktions namens <code>async</code> aufgerufen wird. Die ergibt irgendeinen Wert, und auf den möchte man nun einen => Operator anwenden? No, Sir, that's not possible, Sir.</p> <p>Das zeigt, dass ESLint durchaus Nachbesserungsbedarf hat. Es reicht nicht, die neueren Sprachkonstrukte einfach aus der Grammatik herauszunehmen. Man muss sie drin haben und <strong>dann</strong> erkennen, dass das einen bestimmten Sprachlevel vorausetzt.</p> <p>Ich habe tatsächlich keine Ahnung, ob die dark corners von JavaScript so finster sind, dass ein total legales und funktionierendes Konstrukt in Version X durch eine Veränderung in Version X+1 plötzlich etwas ganz anderes tut, weil ein neues Feature es umdeutet. Ich <strong>hoffe</strong>, dass das nicht so ist.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786691#m1786691 Rolf B 2021-04-01T09:01:20Z 2021-04-01T09:02:30Z Node.js und Firebase <p>Hallo dedlfix,</p> <blockquote> <p>Dass der Fehler im Zusammenhang mit async auftritt, ist eher Zufall.</p> </blockquote> <p>Nein, ich denke nicht. <a href="/self/2021/mar/31/node-jas-und-firebase/1786690#m1786690" rel="noopener noreferrer">Guckst Du</a></p> <p>(Edit - damn, Hash-Part als Link genügt alleine nicht )</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786699#m1786699 Casablanca 2021-04-01T10:20:17Z 2021-04-01T10:20:17Z Node.js und Firebase <p>Hi,</p> <p>danke. Ich habe die Arrow-Funktion auch in den anderen Bereichen. Der Parser meckert sich hierbei aber nur in Verbindung mit async. Wie bereits erwähnt, halte ich async als Sprach-Funktion mittlerweile als substanziell genug, um diese direkt beim parsen zu berücksichtigen. Man führt auch keine Einstellungen für foreach, if und derartiges.</p> <p>LG</p> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786698#m1786698 dedlfix 2021-04-01T10:06:41Z 2021-04-01T10:06:41Z Node.js und Firebase <p>Tach!</p> <blockquote> <p>Das zeigt, dass ESLint durchaus Nachbesserungsbedarf hat. Es reicht nicht, die neueren Sprachkonstrukte einfach aus der Grammatik herauszunehmen. Man muss sie drin haben und <strong>dann</strong> erkennen, dass das einen bestimmten Sprachlevel vorausetzt.</p> </blockquote> <p>Naja, dann müsste man jeden alten Linter/Parser an alle neu erscheinenden Sprachversionen anpassen, so dass er nicht nur Syntaxfehler gemäß dem alten Stand bemängelt, sondern auch noch errät, welches Feature aus welcher neuen Sprachversion man gemeint haben könnte. Das halte ich für zu aufwendig.</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786697#m1786697 dedlfix 2021-04-01T10:01:19Z 2021-04-01T10:01:19Z Node.js und Firebase <p>Tach!</p> <blockquote> <blockquote> <p>Dass der Fehler im Zusammenhang mit async auftritt, ist eher Zufall.</p> </blockquote> <p>Nein, ich denke nicht. <a href="/self/2021/mar/31/node-jas-und-firebase/1786690#m1786690" rel="noopener noreferrer">Guckst Du</a></p> </blockquote> <p>Na gut, in deinem Beispiel beklagt sich nur der ES2015-Linter mit der Meldung aus dem OP. Der ES5 würde sich schon am let stören. Aber wenn wir da mal var nehmen, gefällt ihm an dem Konstrukt ein "Assigning to rvalue" nicht. Und ohne das async beklagt er sich nur über ein unerwartetes > (ohne =).</p> <p>dedlfix.</p> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786702#m1786702 Rolf B 2021-04-01T11:23:08Z 2021-04-01T11:23:08Z Node.js und Firebase <p>Hallo dedlfix,</p> <blockquote> <p>Der ES5</p> </blockquote> <p>wurde jetzt von Dir ins Spiel gebracht und war bisher auf der Veteranentribüne...</p> <p>Sogar der IE11 kann schon let. Fast das einzige ES6, was er gelernt hat. Und was <strong>der</strong> kann, kann man als universell nutzbar ansehen </p> <p>Staufers Hinweis bezog sich aber auf ES7 (aka 2016) vs ES8 (aka 2017).</p> <p>Und ich hatte mein "ESLint muss dazulernen" auch anders gedacht. Wenn ich einen Linter herausbringe, der bis hin zu ECMAScript 2017 oder vielleicht auch mehr beherrscht, und ihm eine Option wie „JS Konstrukte sind nur bis ECMAScript 2016 zulässig“, dann ist ein stumpfes dumb-down auf den ECMAScript 2016 Parser eine zu einfache Lösung.</p> <p>Die aufwändige Lösung ist ein ECMAScript Parser für den aktuellen Sprachlevel, der jedes erkannte Sprachkonstrukt mit "valid in ES.x" markiert und ggf. auch "deprecated in ES.y", und nachdem der durch ist, durchsucht ESLint den gefundenen <a href="https://de.wikipedia.org/wiki/Syntaxbaum#Abstrakte_Syntaxb%C3%A4ume" rel="nofollow noopener noreferrer">AST</a> nach Sprachmarkierungen, die für den gewünschten Ziellevel zu hoch sind.</p> <p>Die billigere Lösung wäre, für jeden Sprachlevel einen Parser aufzubewahren, mit dem Parser für den gewünschten Level zu beginnen, und bei gefundenen Fehlern so lange auf den nächsthöheren Level zu wechseln, bis der Fehler weggeht. In Casablancas Fall hätte er - mutmaßlich - mit ES7 begonnen, den Parser Error bekommen, es mit ES8 nochmal probiert, das Weggehen des Fehlers festgestellt und dann sagen können: Sorry, ECMAScript 2017 Feature, you wanted only ECMAScript 2016.</p> <p>Und wenn der Fehler nicht weggeht, kann er immer noch „That's tommy-rot in line 4711“ ausgeben...</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/mar/31/node-jas-und-firebase/1786701#m1786701 dedlfix 2021-04-01T11:21:42Z 2021-04-01T11:21:42Z Node.js und Firebase <p>Tach!</p> <blockquote> <p>Wie bereits erwähnt, halte ich async als Sprach-Funktion mittlerweile als substanziell genug, um diese direkt beim parsen zu berücksichtigen.</p> </blockquote> <p>Dann übersiehst du aber, dass noch genügend alte Systeme in Verwendung sind, die die neue Syntax nicht kennen. Für diese muss man alten Code erzeugen oder Syntax gemäß alter Regeln prüfen.</p> <p>Eigentlich bist du als Programmierer selbst dafür verantwortlich, dass du auch deine Tols kennst, und sie richtig konfigurierst. In der Wirtschaft ist man oft sehr konservativ, und so ist auch bei der Softwareentwicklung meist noch sehr lange die Kompatibilität mit alten Systemen die Defaulteinstellung.</p> <blockquote> <p>Man führt auch keine Einstellungen für foreach, if und derartiges.</p> </blockquote> <p>foreach gibt es in Javascript nicht, aber das dortige Äquivalent hat auch eine Historie hinter sich und ist nicht in allen Versionen gleichermaßen vorhanden.</p> <p>Wie auch immer, es hilft nicht, darüber zu lamentieren, wenn etwas deinen Erwartungen nicht entspricht. Wichtig ist, dass du zu den verwendeten Features prüfst, ob deine Tools auf sie eingestellt sind. Und andererseits, ob die Zielsysteme damit klarkommen, oder du eine frühere Version anbieten muss, dann aber auf aktuellere Features verzichtest.</p> <p>dedlfix.</p>