2022年6月8日水曜日

田中賢一郎氏 Web技術速習テキスト 第8章 授業記録アプリ

 Web技術速習テキスト の最後、いきなり行きます。


第8章 授業記録アプリ は、氏曰く

本書のまとめとして、Vue.js、Firebase 認証、Firestore、Vuetifyといった要素を組み合わせて、より実践的なアプリを作成してみましょう。


是非お願いします!

実は途中にある章飛ばしてここまで来ています。

大丈夫かな、、、

まあいいか。

どんどん写経します。


App.vue

StudentView.vue

TeacherView.vue


とりあえず、ローカルでnpm run serveして画面が出るところまでは行きました。


では次にFirebaseに接続します。

vueファイルを書き換えます。


実行!


エラー


diffとって差分もなくします。


エラー


??


念のため、答えのソースをそのままコピーします。


エラー


????


ちょっとエラー内容を見てみましょう。


 npm run serve


> class-tracker@0.1.0 serve

> vue-cli-service serve


 INFO  Starting development server...



 ERROR  Failed to compile with 1 error                                                 0:23:57


 error  in ./src/App.vue?vue&type=script&lang=js&


Module not found: Error: Package path . is not exported from package C:\xxx\class-tracker\node_modules\firebase (see exports field in C:\xxxx\class-tracker\node_modules\firebase\package.json)


ERROR in ./src/App.vue?vue&type=script&lang=js& (./node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[0]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/App.vue?vue&type=script&lang=js&) 50:15-34

Module not found: Error: Package path . is not exported from package C:\xxxx\class-tracker\node_modules\firebase (see exports field in C:\xxxx\class-tracker\node_modules\firebase\package.json) @ ./src/App.vue?vue&type=script&lang=js& 1:0-203 1:219-222 1:224-424 1:224-424

 @ ./src/App.vue 2:0-55 3:0-50 3:0-50 9:2-8

 @ ./src/main.js 6:0-28 12:13-16


webpack compiled with 1 error



これが詰まった。

package.json見てとか言われても困る。(見たけど何が悪いのかわからん)

Module not foundとか言われても、

Package path . is not exported from package  の「.」は
何言いたいのっ?って感じ。

結論から申し上げますと、4つの問題がありました。

動かすまでの道のり


Firebaseのバージョンアップの影響

Firebase Javascript SDKが、v8からv9 にアップデートされているようです。
そして本書は恐らくv8 
私の環境は npm install --save firebase しているので最新のv9
この差異を吸収するコードを書かないといけませんでした。

const firebase = require("firebase");
       ↓
import firebase from 'firebase/compat/app';
import "firebase/compat/firestore";
import "firebase/compat/auth";

databaseURLが出ないのを出す

Firebaseから取得する「SDKの設定と構成」のソースコードにdatabaseURLが出ていませんでした。
ちゃんと「Firestore Database」で仮ユーザも登録しており、DBはあるはずなのに。

この件は以下のサイトを参考にさせていただきました。

結論からいうと、「Realtime Database」を作成する



でした。
別に使わないのですが、ただ、作成するだけ。データも登録しません。
(キャプチャ取っておけばよかった、、、)


Vuetifyのバージョンアップの影響

上記をクリアしてもエラーがでます。
 [Vuetify] [BREAKING] 'app' has been removed, use '<v-app-bar app>' instead. For more information, see 

タグが属性が廃止され、新しい定義に変える必要があります。
【App.vue】
<v-toolbar app>
   ↓
<v-app-bar app>


まだエラーはなくなりません。
[Vuetify] [BREAKING] 'flat' has been removed, use 'text' instead.
【App.vue】
<v-btn flat ~
   ↓
<v-btn text ~


[Vuetify] [BREAKING] 'box' has been removed, use 'filled' instead. <v-textarea box 
【StudentView.vue】
<v-textarea box 
   ↓
<v-textarea filled

v-stepperの定義バグ

いままでの修正で、構文的なエラーはなくなったのですが、
生徒でログインしたとき、ヘッダ部分以外何も出ない事象が発生しました。
最初IEで見ていたので
「もしかしたらブラウザによってはサポートされていないのか?」
などと思って、Chromeで見てみても出ない。

そういえば、この部分の動きがよくわかっていなかったのですが、
「Stepper」という機能を使っているんですね。

公式サイトがわかりやすくていいですね。

今はヘッダ部分は見えていて、コンテンツ部分が見えていない状況です。

しかしタグの綴りもあっているし、、、

そもそもネットに置いてある答えを持ってきたので、

「間違っている」部分はありません。

それでも出ないのでいろいろ調べたら、、、、

ありました。

export default {
  props: ["students"],
  data() {
    return {
      step: 0,
      picker: new Date().toISOString().substr(0, 10),
      student: "",
      comment: ""
    };
  },

各ステップを「step」という変数で管理しているのですが
初期値が「0」でした。

しかし、実際のstepperで日付指定の部分から始まる最初のstepは、、、
          <v-stepper-step :complete="step > 1"
            step="1">日付指定</v-stepper-step>
          <v-divider></v-divider>

step="1"

よって、export defaultからのstepは、、、
export default {
  props: ["students"],
  data() {
    return {
      step: 1,
      picker: new Date().toISOString().substr(0, 10),
      student: "",
      comment: ""
    };
  },

step:1,

にすることで、、、

でました!

よかった、、、

まとめ

結構つまりました、、、、

同じエラーが出ている人が思うので、本記事が参考になれば幸いです。