.../articles/

IE11で、「文字が正しくありません。」とエラーが出て表示できなかった【Nuxt.js】

Nuxt.jsを使っていて、IE11で表示されず、「文字が正しくありません。(英語的には“syntax error” ?)」とエラーがコンソールに表示されて詰まった話です。

もくじ

  • IEで見たら、アプリ死んでた
  • polyfillかな?
  • packageから探してtranspile
  • 結論:エラーはよく読め

IEで見たら、アプリ死んでた

アプリとかサイト作ったら、IEでチェックしますよね。
戦々恐々としながら、ちゃんと表示されるかな…?って思って見たら、「ほらやっぱり表示されてないー」みたいなのがたまーにあります。
今回は、以下のようなエラーが出ていました。

polyfillかな?

まあそんな時は、ES6とかの構文がBabelで変換できてないんだろうなー
設定漏れかな?とか思ってチェックしてみるわけですね。

今回はNuxtを使っていて、defaultで core-js@2 が使われるから、使っている構文的には問題ないんじゃ? 設定ミスか?なんて思って、ひたすらBabelのOptionをいじっていました。

debug: true にして、logを追ってということを数時間やっていました。

    babel: {
      presets ({ isServer }, [preset, options]) {
        return [
          [
            preset,
            {
              ...options,
              targets: isServer
                ? { node: 'current' }
                : { browsers: ['last 2 versions'], ie: 11 },
              corejs: { version: 2 },
              debug: true,
            },
          ],
        ]
      },

@ymmooot くんに、アドバイスを求めたりしながら、

transform-template-literals { "android":"76", "ie":"11", "opera":"12.1", "safari":"12.1" }
ってなっているのに、buildされたjsの中で使われているから、IEで死んでるんだろうというところまで分かってきました。
そこから、

山本 : 「babelってないnode_moudlesのコードかな〜」

なんてアドバイスをもらって、え、まじ?そういうパターンあるのか
と思って調べてみました。

packageから探してtranspile

そこで改めて、元々表示されていたエラーメッセージに戻ります。

文字が正しくありません。
93~~~.js (1, 2453)

ということで、実際にエラーが出ていたbuild後のファイルの該当箇所(1行目、2453文字目)を見てみると、

innerHTML=`@keyframes ${t} {${n}}`

という部分が残っていました。

Template literal のブラウザ実装状況を見てみると、IEは対応していない。
なるほどここかーってなりながら、*1の参考記事を見ながら、transpileを追加してやりました。

  build: {
    publicPath: '/assets/',
    extractCSS: true,
    transpile: [
      /(.+)(library-name\/src\/path\/)(.+)(\.js)$/,
    ],
    babel: {
      presets ({ isServer }, [preset, options]) {
        return [
          [
            preset,
            {
              ...options,
              targets: isServer
                ? { node: 'current' }
                : { browsers: ['last 2 versions', '> 0.25%, not dead'], ie: 11 },
              corejs: { version: 2 },
            },
          ],
        ]
      },
    },

上記対応で、無事IEでも見れるようになりました。

結論:エラーはよく読め

この一連の流れ、できる人からしたらイケてなさが溢れていると思います。
最初からエラーメッセージをよく読んで、エラーが出ているファイルの該当箇所を読めば、すぐにデバッグできた内容かと思います。
普段から、エラーメッセージはよく読もうと言っている自分がこのようなことをしていて、とてつもなくでかいブーメランを投げてしまったなと反省しています。。
こういうことがありましたよというやってしまったネタとして後悔して供養しつつ、自分への戒めとしたいと思います。

参考文献

.../articles/

Articles

記事

AWS AmplifyにmonorepoのNext.js(App Router)をデプロイする

AWS AmplifyにmonorepoのNext.js(App Router)をデプロイする

monorepo管理しているNext.jsをAmplifyにデプロイしようとした際にいくつか躓く内容があったのでまとめておきます。

リモートワーク・オンライン会議でも、スムーズに制作を進めるために大切なこと[資料編]

リモートワーク・オンライン会議でも、スムーズに制作を進めるために大切なこと[資料編]

コロナ禍の影響により、リモートワークの導入をおこなっている制作会社も多く、実際に弊社でも導入しています。

売れるECサイトデザインを作るために。参考にしたいおしゃれな事例の探し方。

売れるECサイトデザインを作るために。参考にしたいおしゃれな事例の探し方。

売れるECサイトのデザインは、「この形式」という決まりはありません。ECサイトで売り上げを上げるなら、しっかりとしたコンセプトと、コンセプトを決定するまでのリサーチが必要です。

制作会社の考える、業務効率化ツールのおすすめ。個人でも使いやすいサービスなど。

制作会社の考える、業務効率化ツールのおすすめ。個人でも使いやすいサービスなど。

新型コロナウイルス感染拡大の影響で、リモートワークが主流になり、弊社でも週のほとんどは各自宅で作業をしています。

Figmaでデザインのコミット履歴を残せるプラグイン【Thought Recorder】をリリースしました

Figmaでデザインのコミット履歴を残せるプラグイン【Thought Recorder】をリリースしました

Figmaを利用するWebデザイナーの助けになれると嬉しいです。使い方は本記事をご覧ください。

ECの構築方法、おすすめのECサービス。

ECの構築方法、おすすめのECサービス。

ファッションや家電、スーパーの買い物でさえもECサイトを利用することが当たり前になりました。加えて新型コロナウイルスの影響もあり、弊社にも「どんなプラットフォームを利用したら良いか」「どれくらいコストがかかるのか」などECに関するさまざまなご相談を頂きます。

FastAPIのスキーマクラスをOpenAPIから生成する方法

FastAPIのスキーマクラスをOpenAPIから生成する方法

PythonでAPIを構築する要件があり、フレームワークに比較的モダンなFastAPIを採用しました。FastAPIはバックエンドの開発を行えば自動でOepnApi定義を生成する機能が備わっていますが、今回はこれを使わず、事前に用意したOepnApi定義からFastAPIで利用するスキーマクラスを生成する方法を紹介します。

Laravel 日本一解りやすい全文検索のマイグレーション記載方法解説

Laravel 日本一解りやすい全文検索のマイグレーション記載方法解説

Laravel + MySQLで全文検索を実装する

GiFT1号目新卒デザイナーの2021年振り返り

GiFT1号目新卒デザイナーの2021年振り返り

いつの間に、年末ですね。入社してもう、9ヶ月も立っていたようです。2021年の振り返りを記事にしました。

TimesclaeDBのデータ圧縮に関して

TimesclaeDBのデータ圧縮に関して

TimescaleDBはデータベース内の一部のテーブルを時系列データとして扱えるPostgreSQLの拡張です。PostgreSQLの機能拡張なので非常に手軽に導入できます。今回はこのTimesaceDBの圧縮について調べたので備忘録として書き綴りました。

すべての記事

お問い合わせ