Nuxt.js初心者がハマって二度とやらなくなるエラー対策

シェアする:

この記事をおすすめしたい人

  • Nuxt.jsを初めて使う人
  • Nuxt.jsを始めようと思ったらいきなりエラーで泣いてる人
  • つまりオレ

何も知らない超初心者が脱WordPressしたくてNuxt.jsでサイト構築していくシリーズです。

今回はですね、せっかくNuxt.jsを始めてみようと思って公式サイトを見て開発環境を整えたのに、

デモページすらエラーで起動せんやないかい!!

みたいな問題を解決していきます。

いやー僕はなんだかんだでNuxt.jsで10個以上のプロジェクト作ったんですが、いつ頃からか新規プロジェクトを作るだけでこの問題にぶつかってたんですよ。 土台となる知識がなさ過ぎて何が原因なのか何が原因か特定できなかったので、安定稼働してるプロジェクトをコピーしてこの問題からずっと逃げていました。

いい加減どうにかしようと思って公式情報を中心にエラーの原因を特定したのでここに整理しておきます。

なお、このページのお話はNuxt v2の話で、最新版のv3の話ではありません。 v2の安定した開発環境構築の手助けになれば幸いです。

v3はね、開発環境構築に成功してないんです…。

Nuxt.jsとNode.jsのバージョンを確認しよう

結論からいうと、インストール直後のデモページの起動でこけるのはNode.jsのバージョンが低い可能性が高いです。 Nuxt v2の場合はNodeのバージョンが最低v14必要。

起動するとこんな↓エラーが出ました。


SyntaxError: Unexpected token '.'

このままのエラーメッセージで検索すると類似案件が大量に出て来ますが、Nuxt.jsに限定するとこの辺とか。

Oh... Node.jsのバージョンが古いんじゃね?

というわけで、NuxtとNodeのバージョンについて調べてみました。

僕が最初にインストールした時はNuxt.jsのバージョンが2.14台で、Nodeはv12でした。 今は公式サイトでこの時期のリリースノートが見れないので当時の対応バージョンが不明ですが、現在のNuxt.js v2のインストールマニュアルを見ると、

node – We recommend you have either 16.x or 14.x installed.

「Node.jsはv16か、v14を推奨」となっています。

当初はNode.jsのv12でも動いていたのでリリースノートを遡ってみると、v2.16.0の段階で

In this PR we only support Node 14+.

「Node v14以上が必須」となっています。

お前さっきv14以上を「recommend」=推奨って書いてなかったか?

とツッコミはおいておいて、うちのバージョンテストの環境ではv2.15.8まではNode v12で動いていたので、Nuxt v2.16からv14が必須になったんだと思われます。

その後のv2.16.2↓でNode v14.18が必須かつ、v16をサポート。

Add minimum node 14.18 version constraint

最新版のv3↓ではv16が必須になっているようです。

Node.js – v16.10.0 or newer

なので、開発環境では

Node.jsはv16がオススメ!

になります。

うちは開発環境がNASで、NAS側が提供してるNode.js依存で、v16環境を安定動作させられていないので、v14で動かしています。

Nuxt v2ならNodeはv14必須!

Nuxt v3ならNodeはv16必須!

Nuxt v3のテストはまた今度やります。

「node-sass」モジュールのエラー

「node-sass」はNode.js環境でSASS(効率的なCSSの記述方法)を使えるようにするモジュールです。

「node-sass」でエラーが出るパターンは2つあるみたいです。

「node-sass」は非推奨になった

公式サイトですらこの↓ように書いています。

Warning: LibSass and Node Sass are deprecated. While they will continue to receive maintenance releases indefinitely, there are no plans to add additional features or compatibility with any new CSS or Sass features. Projects that still use it should move onto Dart Sass.

最終更新が2022年5月で止まっているみたいで、ちゃんと更新されているDart Sassへ移行してね、ってことみたい。

ただ、「node-sass」と「Dart Sass」で記述が変わる部分があるらしく、既存の開発環境から移行する場合はちゃんとテストした方が良さそう。

最低限の記述でテストした場合はそのままいけましたが、「@nuxtjs/style-resources」の挙動が変わるケースを検証してるブログがあったので、必要な場合は確認してください。 うちはテスト不十分なので「node-sass」のまま使う方法を調べました。

新規でNuxtを始める場合はDart Sass一択だと思います。

「node-sass」はNode.jsのバージョンごとに推奨バージョンがある

公式からかなり細かい指定があるので、公式サイトを見てください。

今回、僕がテストしたバージョンだと、Node v12なら「4.12~8.0を使ってね」、v14なら「4.14~9.0を使ってね」とあります。

テストした範囲だと低いバージョンでエラー出たので、Node v12ならv7、v14だとv8が必要でした。

バージョン指定のインストールはこんな↓感じで、赤文字のところに指定するとそのバージョン内の最新バージョンがインストールできます。


npm i --save-dev node-sass@8

Node v16以降では「node-sass」の現行最新バージョンでOKっぽいので、気にしなくてよさそうです。

「postcss-loader」モジュールのエラー

「postcss-loader」はWebPack上でPostCSSを使うモジュールのようで、NuxtもWebPackを使ってるのでNuxtでPostCSSを使えるようにするみたいです。

PostCSSが何かは全然分かっていませんが、autoprefixer(ベンダープレフィクスを自動で追加する機能)のみ明示して使っています。

「postcss-loader」でエラーが出るのはWebPackのバージョンの問題です。

You need webpack v5 to use the latest version. For Webpack v4, you have to install postcss-loader v4.

公式によると、WebPackがv5なら最新版を、v4ならv4を使えとありました。

Nuxt v2をインストールするとWebPackはv4.46.0になっていたので「postcss-loader」v4を使えばいいようです。


npm i --save-dev postcss-loader@4

もしv5になっていたら最新版を使ってください。

「sass-loader」モジュールのエラー

「sass-loader」は「node-sass」を使ってSASSの読み込みを行うモジュール…でいいのかな。

公式では確認できませんでしたが(書いてる?)、こちらもWebPackとのバージョン問題があるようで、モジュールをインストールしようとするとこんな↓感じのエラーが出て失敗します。


npm ERR! peer webpack@"^5.0.0" from sass-loader@13.3.2

バージョンを下げていってもこんな↓感じで、


npm ERR! peer webpack@"^5.0.0" from sass-loader@12.6.0
npm ERR! peer webpack@"^5.0.0" from sass-loader@11.1.1

v10でようやくインストールができました。


npm i --save-dev sass-loader@10

「@nuxtjs/google-adsense」モジュールのエラー

これはたぶん一時的なエラーなんじゃないかと思います。

執筆時点で、「@nuxtjs/google-adsense」はv2.1.0がインストールされます。 このまま起動すると、こんな↓感じになって起動にこけます。


Error: Template not found:

これまでの傾向的にv2以降でWebPackの要求バージョンかと思ったら公式には特に記載がなく(ないよね?)、1つ前と思われるv2.0.0をインストールすると動きました。 WebPackどうのうではなく、v2.1.0固有のトラブルの可能性がありそう。

なので、v2.0.0固定でインストール↓するか、


npm i @nuxtjs/google-adsense@2.0.0

v1時代の最新版をインストール↓しとけば問題なかったです。


npm i @nuxtjs/google-adsense@1

インストールするタイミングでv2.1.0以降が出ていれば改善している可能性があるので、試してみる価値はありますぜ。

まとめ?

いろいろ試した感じ、

  • Nuxt.js
  • Node.js
  • Webpack

のいづれかのバージョンによって対応/非対応が決まっているような感じでした。

それぞれのモジュールの公式見てもNodeいくつから対応とか書いてないことも多々あるので、エラー画面でエラー吐いてるモジュールが特定できたらメジャーバージョンを下げてみるとか。 でもadsenseみたいにマイナーバージョンの変化でエラー出たりもするので臨機応変にやるしかないのかも。

以上、WordPressからお届けしました!

シェアする: