misskey
misskey copied to clipboard
ReferenceError: LANGS is not defined
💡 Summary
ローカルでテストする時よくみるエラー
https://github.com/misskey-dev/misskey/blob/4a989f7ebbd96ba4c90133935fd32af296474785/packages/backend/src/server/web/boot.js#L30-L33
実際LANGSはない
🥰 Expected Behavior
エラーが出ない
🤬 Actual Behavior
エラーがでる
📝 Steps to Reproduce
よくわかりません。コードみたら100%発生しそうにも見えますがそんなことはないのでちょっと謎です
📌 Environment
Misskey version: ac0e0122f64bef3addfc490ac951d2c53ec1f295 Your OS: Windows 11 Your browser: Firefox
手動でOCIにインストールしたところproductionビルドにも関わらず同様のエラーが発生します
ブラウザ上の表示は「Failed to load
読み込みに失敗しました」となっています
最近 pnpm dev した際にこのエラー(もしくは、フリーズしてスピナーが永遠に回っている状態[^1])に時々遭遇するようになりました。
[^1]: この際ブラウザのコンソールには fatal: invalid regex: repetition-operator operand invalid と出ている
この変数 LANGS 自体は pnpm build-assets が走ると自動で置換されるようになっています。
https://github.com/misskey-dev/misskey/blob/b8800b8b95712ed25266ba294850963b4643f04f/scripts/build-assets.mjs#L52
pnpm dev した際に実行される scripts/dev.mjs にも当該処理は存在しますが、その後に実行される pnpm --filter backend dev によって packages/backend/built/server/web/boot.js が上書きされる(すなわち LANGS が残った状態になる)ためこの処理は意味を成しません。pnpm build-assets --watch がその後に運良く走った場合は LANGS が再置換されるのでエラーが生じませんが、そうではなかった場合には LANGS が置換されない(もしくは置換されていても中途半端に中身が汚れることがある?)のでエラーが生じてしまいます。
私のローカルでは pnpm build-assets --watch を setTimeout で数秒遅らせる(もしくは手動で pnpm build-assets を走らせる)ことで一応解決しています。
一度うまく行けばキャッシュが効く?のでその後も問題なく動くのですが、例えばバックエンドで何らかの編集をしてしまうと nodemon によってビルドが走り boot.js が確実に汚れるので、その後にキャッシュを削除したりプライベートブラウジングなどで開いたりすると見事にこのエラーに遭遇してしまいます。その際には手動で pnpm build-assets を走らせる必要があります。
LANGS を置換するのではない別の方法を考えたほうが良さそうな気はします。
↑ #12861 で言及されていたようです(重複失礼しました)
Fixed by #13659