vite+vue3+element-plus プロジェクトをビルドする手順

vite+vue3+element-plus プロジェクトをビルドする手順

viteを使用してvue3プロジェクトを構築する

ターミナルで次のコマンドを実行すると、Vite を使用して Vue プロジェクトをすばやくビルドできます。

$ npm init vite-app <プロジェクト名>
$ cd <プロジェクト名>
$ npmインストール
$ npm 実行 dev

Element Plusのご紹介

Element Plusをインストールします:

npm インストール element-plus --save

Element Plus は main.js で完全に導入されています。

'vue' から {createApp} をインポートします。
'element-plus' から ElementPlus をインポートします。
'element-plus/lib/theme-chalk/index.css' をインポートします。
'./App.vue' からアプリをインポートします。

const app = createApp(App)
app.use(ElementPlus)
app.mount('#app')

SCSSのインポート

sass をインストールするコマンド npm i sass -D を実行し、vue ファイルのスタイル タグに lang="scss" を追加します。これらは vue2 以前と同じです。

npm と sass -D

eslintをインポートする

eslintをインストールする

npm と eslint -D

このプロジェクトを初期化するにはeslintを使用します

npx eslint --init

指示に従ってセットアップしてください。これは私が選択した設定です

vue-routerをインポートする

Vue Router 4をインストールする

vue-router@4 を npm でインストールします

srcディレクトリに新しいルーターフォルダを作成し、ルーティング設定のためにルーターの下にindex.jsを作成します。

'vue-router' から VueRouter として * をインポートします。

定数ルート = [
  {
    パス: '/'、
    コンポーネント: () => import('../page/Home.vue')
  }, {
    パス: '/login',
    コンポーネント: () => import('../page/Login.vue')
  }
]

デフォルトのVueRouter.createRouterをエクスポートします({
  履歴: VueRouter.createWebHashHistory(),
  ルート
})

main.jsでこのミドルウェアを使用する

'./router' からルーターをインポートします
//...
app.use(ルーター)

vuexをインポートする

vuexをインストールする

npm インストール vuex@next --save

srcの下にストアパスを作成し、storeの下にindex.jsを作成します。

'vuex' から {createStore} をインポートします。

エクスポートデフォルトcreateStore({
  州 () {
    戻る {
      ユーザー名: ''
    }
  },
  突然変異:
    setUserName (状態、ペイロード) {
      state.username = ペイロード
    }
  }
})

main.js でストアを使用する

'./store' から vuex をインポートします
//...
アプリを使用する(vuex)

Axios のインポート

ネットワークリクエストにはaxiosを使用します。まずaxiosをインストールします。

npmとaxios

srcディレクトリの下にapiディレクトリを作成し、apiパスの下にaxios.jsを作成し、axiosインスタンスを設定します。

// アクシオス
'axios' から axios をインポートします
// '../../config' から設定をインポートします
'vue-router' から { useRouter } をインポートします。

エクスポートデフォルト関数(){
  // 1. リクエストを送信するときに、トークンがある場合は、リクエスト ヘッダーに添付する必要があります。const token = localStorage.getItem('token')
  インスタンス = axios

  if (トークン) {
    インスタンス = axios.create({
      // ベースURL: config.server,
      ヘッダー: {
        認証: 'Bearer' + トークン
      }
    })
  }

  定数ルーター = useRouter()
  インスタンスインターセプターレスポンスの使用(
    (回答) => {
      // 2. 応答時にトークンがある場合はトークンをローカルに保存する(localstorage)
      if (resp.data.data.token) {
        localStorage.setItem('token', resp.data.data.token)
      }
      // 3. 応答時に、応答メッセージコードが403(トークンなし、トークン無効)の場合は、トークンをローカルで削除します
      (応答データコード === 403)の場合{
        localStorage.removeItem('トークン')
        localStorage.removeItem('ユーザー名')
        router.push({ name: 'ログイン' })
      }
      応答を返す
    },
    (エラー) => {
      Promise.reject(err) を返します。
    }
  )

  インスタンスを返す
}

apiパスの下にindex.jsを作成し、apiを記述します

'./axios.js' からのインポート要求
'../../config' から設定をインポートします
エクスポートデフォルト{
  // ログイン login (params) {
    request().post(`${config.server}/login`, params) を返します。
  },
  // ユーザーリストを取得する getUserList (params) {
    リクエスト()を返します。get(`${config.server}/user/list`, {
      パラメータ: パラメータ
    })
  },
  // ユーザーを追加する createUser (params) {
    request().post(`${config.server}/user/`, params) を返します。
  },
  //...

次に、vue3 のコンポジション API を使用してコンポーネントを開発します。以下は、User モジュールの開発例です。

<テンプレート>
  <div class="user-wrap">
      <el-ボタン
        クラス="create-btn"
        タイプ="成功"
        サイズ="小"
      @click="handleCreate">ユーザーを追加+</el-button>
      <el-テーブル
        :data="テーブルデータ"
        スタイル="幅: 100%">
        <el-テーブル列
            label="ユーザー名"
            prop="ユーザー名">
        </el-table-column>
        <el-テーブル列
            label="パスワード"
            prop="パスワード">
        </el-table-column>
        <el-テーブル列
            align="right">
            <テンプレート #ヘッダー>
                <el-入力
                v-model="検索"
                @blur="検索ユーザー"
                サイズ="ミニ"
                placeholder="検索するユーザー名を入力してください"/>
            </テンプレート>
            <テンプレート #default="スコープ">
                <el-ボタン
                サイズ="ミニ"
                @click="handleEdit(scope.$index, scope.row)">編集</el-button>
                <el-ボタン
                サイズ="ミニ"
                タイプ="危険"
                @click="handleDelete(scope.$index, scope.row)">削除</el-button>
            </テンプレート>
        </el-table-column>
    </el-table>
    <el-ページネーション
      :hide-on-single-page="1 ページで非表示"
      クラス="ページ折り返し"
      @size-change="ハンドルサイズ変更"
      @current-change="現在の変更を処理する"
      :current-page="現在のページ"
      :ページサイズ="[10, 20, 30, 40]"
      :page-size="ページサイズ"
      layout="total, sizes, prev, pager, next, jumper"
      :total="合計数">
    </el-pagination>
    <el-dialog title="ユーザー情報" v-model="dialogFormVisible">
        <el-form :model="フォーム">
            <el-form-item label="ユーザー名" :label-width="フォームラベルの幅">
                <el-input v-model="form.username" autocomplete="オフ"></el-input>
            </el-form-item>
            <el-form-item label="パスワード" :label-width="フォームラベルの幅">
                <el-input v-model="form.password" オートコンプリート="オフ"></el-input>
            </el-form-item>
        </el-form>
        <テンプレート #フッター>
            <span class="ダイアログフッター">
                <el-button @click="dialogFormVisible = false">キャンセル</el-button>
                <el-button type="primary" @click="confirmUser">確認</el-button>
            </span>
        </テンプレート>
    </el-ダイアログ>
  </div>
</テンプレート>

<スクリプト>
'vue' から { ref, computed } をインポートします
'../../../api/index' から api をインポートします
'element-plus' から { ElMessage, ElMessageBox } をインポートします。

エクスポートデフォルト{
  設定 () {
    ステータスを '' にします
    ユーザーIDをnullにする
    定数フォームラベル幅 = ref('120px')

    // ユーザーリストを取得 const tableData = ref([])
    非同期関数 getList (params) {
      const res = api.getUserList(params) を待機します
      (res.data.success)の場合{
        テーブルデータ値 = res.data.data.userList
        合計カウント値 = res.data.data.count
        検索値 = ''
      } それ以外 {
        ElMessage.error('ユーザーリストの取得に失敗しました:' + res.data.msg)
      }
    }
    getList()

    定数フォーム = ref({
      ユーザー名: ''、
      パスワード: ''
    })

    定数 dialogFormVisible = ref(false)

    // ユーザー情報を送信する async function confirmUser() {
      // 情報が完全であることを確認します if (!(form.value.username && form.value.password)) {
        ElMessage.error('フォーム情報が不完全です')
        戻る
      }
      スイッチ(ステータス){
        ケース '作成':
          createUser(フォームの値)
          壊す
        ケース '編集':
          updateUser(ユーザーID、フォームの値)
          壊す
      }
    }

    // ユーザー非同期関数handleCreate()を追加{
      フォームの値 = {
        ユーザー名: ''、
        パスワード: ''
      }
      dialogFormVisible.値 = true
      ステータス = '作成'
    }
    // ユーザー情報を追加する async function createUser (params) {
      const res = api.createUser(params) を待機します
      (res.data.success)の場合{
        getList()
        ElMessage.成功({
          メッセージ: '正常に追加されました'、
          タイプ: '成功'
        })
        dialogFormVisible.値 = false
      } それ以外 {
        ElMessage.error('追加に失敗しました:' + res.data.msg)
      }
    }

    // ユーザーを編集する async function handleEdit (index, row) {
      console.log(インデックス、行)
      dialogFormVisible.値 = true
      ステータス = '編集'
      form.value.username = row.username
      フォーム.値.パスワード = 行.パスワード
      ユーザーID = 行ID
    }
    // ユーザー情報を変更する async function updateUser (id, params) {
      const res = api.updateUser(id, params) を待機します
      (res.data.success)の場合{
        ElMessage.成功({
          メッセージ: 「変更は成功しました」
          タイプ: '成功'
        })
        getList()
        dialogFormVisible.値 = false
      } それ以外 {
        ElMessage.error('変更に失敗しました: ' + res.data.msg)
      }
    }

    // ユーザーを削除する const handleDelete = async (index, row) => {
      ElMessageBox.confirm('この操作によりユーザーは永久に削除されます。続行しますか?', 'Prompt', {
        confirmButtonText: '確認'、
        cancelButtonText: 'キャンセル'、
        タイプ: '警告'
      }).then(非同期() => {
        delUser(行ID)を待機します
      }).catch(() => {
        エルメッセージ({
          タイプ: '情報'、
          メッセージ: '削除されました'
        })
      })
    }
    // ユーザー情報を削除する async function delUser (id) {
      const res = api.delUser(id) を待機します
      (res.data.success)の場合{
        getList()
        ElMessage.成功({
          タイプ: '成功'、
          メッセージ: '正常に削除されました!'
        })
      } それ以外 {
        ElMessage.error('削除に失敗しました: ' + res.data.msg)
      }
    }

    // ユーザーを検索 const search = ref('')
    非同期関数searchUser(){
      現在のページの値 = 1
      ページサイズ値 = 10
      if (検索値 === '') {
        getList({ ページインデックス: 現在のページの値、ページサイズ: ページサイズの値 })
        戻る
      }
      現在のページ.val = 1
      const res = api.findUserByUsername({ ユーザー名: search.value }) を待機します
      (res.data.success)の場合{
        テーブルデータ値 = res.data.data.userList
        ElMessage.成功({
          メッセージ: 「検索成功」
          タイプ: '成功'
        })
      } それ以外 {
        ElMessage.error('変更に失敗しました: ' + res.data.msg)
      }
    }

    // ページング関連 const totalCount = ref(0)
    定数currentPage = ref(1)
    定数ページサイズ = ref(10)
    関数handleSizeChange(val) {
      ページサイズ.値 = val
      getList({ ページインデックス: 現在のページ値、 ページサイズ: val })
    }
    関数handleCurrentChange(val){
      現在のページの値 = val
      getList({ ページインデックス: val, ページサイズ: pageSize.value })
    }
    // ページが複数ある場合はページングプラグインを非表示にする const hideOnSinglePage = computed(() => {
      totalCount.value <= 10 を返す
    })

    戻る {
      テーブルデータ、
      検索、
      ダイアログフォーム表示、
      形状、
      フォームラベル幅、
      ユーザーの作成、
      ハンドル編集、
      ハンドル削除、
      ユーザー確認、
      ハンドル作成、
      検索ユーザー、
      現在のページ、
      合計数、
      ハンドルサイズ変更、
      ハンドル現在変更、
      ページサイズ、
      単一ページで非表示
    }
  }
}
</スクリプト>

<style lang="scss" スコープ>
    .user-wrap{
        幅: 100%;
        最小幅: 500px;
        .create-btn{
            下マージン: 10px;
            ディスプレイ: フレックス;
            コンテンツの端揃え: flex-end;
        }
        .ページ折り返し{
            上マージン: 10px;
        }
    }
</スタイル>

これで、vite+vue3+element-plus プロジェクトの構築手順に関するこの記事は終了です。vite 構築 vue3+ElementPlus の関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Viteはプロジェクトを構築し、マイクロフロントエンドをサポートします
  • この記事では、Viteがブラウザのリクエストに対して何を行うかを説明します。
  • Vite+ElectronでVUE3デスクトップアプリケーションを素早く構築
  • 古い Vue プロジェクトに Vite サポートを追加する方法
  • Vite2.0の落とし穴
  • Vue3.0+vite2は動的非同期コンポーネントの遅延読み込みを実装します
  • プロジェクトを素早く構築するためのvite+vue3.0+ts+element-plusの実装
  • Viteの原理を学ぶ

<<:  Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

>>:  MySQLとRedisでセカンダリキャッシュを実装する方法の詳細な説明

推薦する

Ubuntu 18.04 に Anaconda3 をインストールするための詳細なチュートリアル

Anaconda は、conda、Python、およびそれらの依存関係など、180 を超える科学パッ...

ReactとReduxの関係を詳しく説明

目次1. reduxとreactの関係2. Reactのマルチコンポーネント共有3. reduxの3...

MySQLデータベースの名前を高速かつ安全に変更する方法(3種類)

目次MySQLデータベースの名前を変更する方法最初の方法: データベースの名前を変更することは非推奨...

JavaScript は div マウス ドラッグ効果を実装します

この記事では、divマウスドラッグ効果を実現するためのJavaScriptの具体的なコードを参考まで...

ドメイン名を介してプロジェクトにアクセスするnginx + tomcatの例

ドメイン名を使ってプロジェクトにアクセスする方法が気になったのですが、自分でドメイン名を取得するのは...

Reactでプロキシを有効にする2つの実用的な方法

プロキシを有効にする2つの方法React には、直接使用できるカプセル化された Ajax リクエスト...

DockerでEurekaを設定する方法

ユーレカ: 1. JDKイメージを構築するEurekaコンテナを起動するjdkフォルダと必要なファイ...

CSS でホバー ドロップダウン メニューを実装する方法

いつものように、今日は非常に実用的な CSS 効果についてお話します。マウスがボタンに移動すると、ド...

4 つの主要な SQL ランキング関数 ROW_NUMBER、RANK、DENSE_RANK、NTILE の使用方法の紹介

1. ROW_NUMBER()定義: ROW_NUMBER() 関数は、select によってクエリ...

MySQL サーバーの接続、切断、および cmd 操作

mysql コマンドを使用して MySQL サーバーに接続します。 MySQL サーバーが起動したら...

タグのhref属性とonclickイベントの使用例

a タグは主にページ ジャンプを実装するために使用され、これは href 属性または onclick...

自動ロック画面機能を実現するjs

1. 使用シナリオこのような要件があるため、システムが開発されました。ユーザーがデスクトップを離れ...

JavaScript データ型の詳細な説明

目次1. リテラル1.1 数値リテラル1.2 浮動小数点リテラル1.3 特別な値1.4 文字列リテラ...

Linuxはバイナリモードを使用してmysqlをインストールします

この記事では、LinuxにバイナリモードでMySQLをインストールする具体的な手順を参考までに紹介し...

Linux で推奨される 9 つの優れたコード比較ツールの概要

コードを書くとき、2 つのファイル間の違い、または同じファイルの異なるバージョン間の違いを知る必要が...