🌍

Nuxtjsでvue-intersectを使う時あったエラーについて

2020/10/23に公開

Vue-intersectをNuxtjsに導入する

仕事でIntersection Observer APIを使うことになって色々とリサーチしたらちょうどいい感じなコンポーネントを見つけました。

公式ドキュメントの通りにやってみた

とりあえず公式ドキュメント通りにinstallして、vueの中にimportして使う。
よし!いい感じに動けるぞ!
でも急にエラーが出てきました....

<template>
  <intersect @enter="msg = 'Intersected'" @leave="msg = 'Not intersected'">
    <div>{{ msg }}</div>
  </intersect>
</template>

<script>
  import Intersect from 'vue-intersect'

  export default {
    components: { Intersect },
    data () {
      return {
        msg: 'I will change'
      }
    }
  }
</script>

エラーを再現する

エラーが起きた状況を説明します。
はじめはブラウザでIntersectを実装するページを開いたまま開発しました。
そのままテストしてIntersectコンポーネントがちゃんと機能してるの確認できました。
一回他のページに遷移してまた戻っても普通に機能しました。

そしてさらに開発をして、ページをリロードしたら下記のエラーが起きます。
"Cannot use import statement outside a module”

あれれ?さっきまで普通だったのにページをリロードしたらエラーが出ます。
試しに他のページを見ましたがエラーが出ません、そして戻ったらエラーが出ません...
でもリロードしたらエラーが出ます...詰んだ...

解決方法

結論からいうと公式のissueを漁ってみたらこれを見つけました
エラーメッセージは僕のと違いますが、エラーのstackを見るとほぼ同じなので下記の設定をnuxt.config.jsに追加したら無事に解決できます。

build: {
    transpile: ['vue-intersect'],
  },

最後に

結局本当の原因はわからずじまいでしたが、一応ネットで同じエラーメッセージをぐぐってみたらもしかしたらES6で書いたモジュールがこういうことが起きるじゃないかと。

もし僕と同じエラーが出て、この記事で解決できたら幸いです。

Discussion