vige
(Ville Nummela)
1
コミット 08883cbdd1c39a0c15b97af44ddaefe14acdc21a により、古い Gecko リリースでの Discourse のレンダリングが破損しました。Gecko はバージョン 74 以前ではオプショナルチェーン演算子をサポートしていません。
詳細については、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining#browser_compatibility をご覧ください。
「いいね!」 2
sam
(Sam Saffron)
2
これはトランスパイルする必要があるのでしょうか、@pmusaraj / @eviltrout / @j.jaffeux?
「いいね!」 3
j.jaffeux
(Joffrey Jaffeux)
3
おそらく間違っているかもしれませんが、最初の推測としては、ブラウザリストを定義していないため、デフォルトのもの(おそらく https://babeljs.io/docs/en/babel-preset-env)が使用され、このバージョンはサポート対象として認識されず、トランスパイルされないということです。
しかし、奇妙なことに、Firefox 74 はわずか 1 年前のバージョンです。ただ、現在の browserlist を見てみると:
$ npx browserslist
...
firefox 89
firefox 88
firefox 78
...
さて、問題は、@sam さん、これをサポートしたいかどうかです。1 年前のバージョンとはいえ、現在の Firefox のバージョンは 89 なので、15 バージョン遡ったことになります。これは判断が難しいですね。これをサポートすると、トランスパイルは基本的にポリフィルと同様に動作するため(このバージョンをサポートするための関数を追加し、構文を関数呼び出しに置き換える)、全ユーザーのペイロードが増加することに注意が必要です。
「いいね!」 2
RGJ
(Richard - Communiteq)
4
「いいね!」 2
j.jaffeux
(Joffrey Jaffeux)
5
理由はたくさんありますが、主に開発者の負担を軽減するためです。使用可能な機能や制限について深く考えずに済むため、比較的モダンな基盤を維持できます。
「いいね!」 4
sam
(Sam Saffron)
6
HTML のフォールバックが整っていれば、サポートを廃止することに異存はありません。
IE9 では動作する静的ページを表示しつつ、1 年前の Firefox では壊れたページを表示することは絶対にできません。
私は 2〜3 年前の Firefox や Chrome までトランスパイルする方が好みですが、その判断は @eviltrout さんやあなたにお任せします。より攻撃的な方針にしても構いませんが、壊れたページを表示することはできません。
編集:バックリンクを参照してください。これは Android において深刻な問題となり得ます。Android はブラウザのアップグレード頻度が極めて低い傾向にあります。
「いいね!」 5
j.jaffeux
(Joffrey Jaffeux)
8
はい、同意します。最低でも Browserlist のサポートを実装して、未対応の機能が予期せず発生しないようにすべきです。
「いいね!」 3
mstm
(mstm)
9
この問題が Google のインデックス登録を制限する可能性がありますか?
インデックス登録のブロックの原因が他にあるかどうかを確認するために、この問題を調査する必要がありますか?
ありがとうございます。
pmusaraj
(Penar Musaraj)
10
メタサイトでは OP の再現ができませんでした。Browserstack を使用し、macOS の Firefox 73 と Windows の Firefox 68 で試しました。@vige さん、メタサイトでの問題再現は可能ですか?
「いいね!」 4
j.jaffeux
(Joffrey Jaffeux)
11
おっしゃる通り、実際には動作するはずです。ブラウザでコードを確認しました:
toggleHamburger: function toggleHamburger() {
this.state.hamburgerVisible = !this.state.hamburgerVisible;
this.toggleBodyScrolling(this.state.hamburgerVisible); // ドロップダウン内の最初のリンクに自動フォーカス
(0, _runloop.schedule)("afterRender", function () {
var _document$querySelect2;
(_document$querySelect2 = document.querySelector(".hamburger-panel .menu-links a")) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.focus();
});
},
ただし、これが問題の原因ではない可能性があっても、実際に何がトランスパイルされ、何がされないのかを正確に把握しようとすべきです。
「いいね!」 4
j.jaffeux
(Joffrey Jaffeux)
12
@pmusaraj、もし間違っていたら訂正してください。presets-env を設定しておらず、結果として targets も定義していないため、含めるすべてのプラグインが使用されていると考えています。その結果、proposal-optional-chaining は確実に適用されます。
これについては問題ないと思いますが、毎年各プラグインを確認し、まだ必要かどうかを再検討する必要があるかもしれませんね。
「いいね!」 2
RGJ
(Richard - Communiteq)
13
「いいね!」 3
j.jaffeux
(Joffrey Jaffeux)
14
いい指摘ですね:
- オプショナルチェーンを含むコードを追加しました
- それを元に戻しました
- 正しい Babel プラグインと共に再度追加しました
ただし、5 日前にはプラグインなしで元のコミットのみをバックポートしました:
@pmusaraj 安定版でもプラグインをバックポートするのは安全だと思いますが、いかがでしょうか?
「いいね!」 8
pmusaraj
(Penar Musaraj)
15
はい、同意します。バックポートすべきですね。本日中に着手します。
「いいね!」 10
pmusaraj
(Penar Musaraj)
16
これは安定版(v2.7.4)で修正されました。Babel の proposal-optional-chaining プラグインが有効になり、問題が解決しています。
@RGJ @j.jaffeux の皆様、そして元の報告をしてくれた @vige にも感謝します!
「いいね!」 12
eviltrout
(Robin Ward)
17
なるほど、それで納得がいきました!コードは安定版に含まれているのに、トランスパイラはまだ含まれていないのですね。調査してくださり、ありがとうございます。
「いいね!」 7
lcb
(Lucas Collins-Breisand)
18
ご対応いただいたすべての開発者の方々に心から感謝いたします!
参考までに、私のテストによると、このバグは場合によっては Android 版の最新 Microsoft Edge にも影響を及ぼしていました(AFAIK、Gecko は動作していません)。
「いいね!」 6
RGJ
(Richard - Communiteq)
19
お手数ですが、そのリリースに実際の v2.7.4 タグを追加していただけますか?
実は git checkout v2.7.4 を試して 30 分ほど費やしてしまったのですが、タグが存在しませんでした 
「いいね!」 3
neil
(Neil Lalonde)
21
申し訳ありません。現在は タグ付け されています。
「いいね!」 7