Vue3 Vue CLI マルチ環境設定

Vue3 Vue CLI マルチ環境設定

1. はじめに

これは、以前よりも面倒なことが少なくなりました。簡単に言えば、設定ファイルを使用して複数の環境を管理し、環境の切り替えを実現することです。

2. 切り替え

1. 開発および本番環境の設定ファイルを追加する

Web のルート ディレクトリに、次の内容の開発環境切り替え構成ファイル .env.dev を作成します。

NODE_ENV=開発
VUE_APP_SERVER=http://127.0.0.1:8880

Web のルート ディレクトリに、次の内容を含むオンライン環境切り替え構成ファイル .env.prod を作成します。

NODE_ENV=本番
VUE_APP_SERVER=https://www.baidu.com

2. 複数の環境をサポートするためにコンパイルと起動を変更する

package.jsonを変更する、つまり元のserverを調整する、

サンプルコードは次のとおりです。

{
  "名前": "ウェブ",
  "バージョン": "0.1.0",
  「プライベート」:true、
  「スクリプト」: {
    "serve-dev": "vue-cli-service サーブ --mode dev --port 8080",
    "serve-prod": "vue-cli-service サーブ --mode prod",
    "build-dev": "vue-cli-service ビルド --mode dev",
    "build-prod": "vue-cli-service ビルド --mode prod",
    "lint": "vue-cli-service lint"
  },
  「依存関係」: {
    "@ant-design/icons-vue": "^5.1.9",
    "ant-design-vue": "^2.0.0-rc.3",
    "axios": "^0.21.0",
    "vue": "^3.0.0",
    "vue-router": "^4.0.0-0",
    "vuex": "^4.0.0-0"
  },
  「devDependencies」: {
    "@typescript-eslint/eslint-plugin": "^4.18.0",
    "@typescript-eslint/パーサー": "^4.18.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
    "@vue/cli-plugin-typescript": "~4.5.0",
    "@vue/cli-plugin-vuex": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/コンパイラ-sfc": "^3.0.0",
    "@vue/eslint-config-typescript": "^7.0.0",
    "eslint": "^6.7.2",
    "eslint-プラグイン-vue": "^7.0.0",
    "typescript": "~4.1.5"
  }
}

右側の npm の更新ボタンをクリックすると、次のような効果が表示されます。

効果を確認するために、 main.tsに出力ログ コードを追加して、変更が成功したかどうかを確認します。

次のコードを追加します。

console.log('環境',process.env.NODE_ENV);
console.log('server',process.env.VUE_APP_SERVER);


知識ポイント:

  • NODE_ENVは設定ファイルに対応するNODE_ENV変数です
  • VUE_APP_SERVERは設定ファイルに対応するVUE_APP_SERVER変数です。

再コンパイルしてサービスを開始します。結果は次のようになります。

3. 複数の環境をサポートするためにaxiosリクエストアドレスを変更する

なぜ変更するのですか?

システムにはリクエストが 1 つしか存在できず、リクエストごとにフルパスを記述するとコードのメンテナンス コストが増加します。そのため、ここではメンテナンス用に統一された構成を使用することをお勧めします。

これはグローバルなので、 main.tsで変更し、 axiosを参照して、デフォルトのアクセス パスを設定するだけで済みます。

サンプルコードは次のとおりです。

'vue' から {createApp} をインポートします。
'ant-design-vue' から Antd をインポートします。
'./App.vue' からアプリをインポートします。
'ant-design-vue/dist/antd.css' をインポートします。
'./router' からルーターをインポートします。
'./store' からストアをインポートします。
'axios' から axios をインポートします。
axios.defaults.baseURL=process.env.VUE_APP_SERVER;

// 開発が簡単という利点がありますが、パッケージ化するとファイルサイズが大きくなるという欠点があります(ただし、影響はありません)
createApp(App).use(store).use(router).use(Antd).mount('#app')

console.log('環境', process.env.NODE_ENV);
console.log('server', process.env.VUE_APP_SERVER);


次に、 homeaxiosのリクエスト アドレスを変更し、パスのみを残します。

サンプルコードは次のとおりです。

<テンプレート>
  <a-レイアウト>
    `<a-layout-sider width="200" style="background: #fff">
      <a-メニュー
          モード="インライン"
          v-model:selectedKeys="selectedKeys2"
          v-model:openKeys="openKeys"
          :style="{ 高さ: '100%', 右境界線: 0 }"
      >
        <a-サブメニューキー="sub1">
          <テンプレート #タイトル>
                <span>
                  <ユーザーによるアウトライン />
                  サブナビ1
                </span>
          </テンプレート>
          <a-menu-item key="1">オプション1</a-menu-item>
          <a-menu-item key="2">オプション2</a-menu-item>
          <a-menu-item key="3">オプション3</a-menu-item>
          <a-menu-item key="4">オプション4</a-menu-item>
        </a-サブメニュー>
        <a-サブメニューキー="sub2">
          <テンプレート #タイトル>
                <span>
                  <ラップトップのアウトライン />
                  サブナビ2
                </span>
          </テンプレート>
          <a-menu-item key="5">オプション5</a-menu-item>
          <a-menu-item key="6">オプション6</a-menu-item>
          <a-menu-item key="7">オプション7</a-menu-item>
          <a-menu-item key="8">オプション8</a-menu-item>
        </a-サブメニュー>
        <a-サブメニューキー="sub3">
          <テンプレート #タイトル>
                <span>
                  <通知の概要 />
                  サブナビ3
                </span>
          </テンプレート>
          <a-menu-item key="9">オプション9</a-menu-item>
          <a-menu-item key="10">オプション10</a-menu-item>
          <a-menu-item key="11">オプション11</a-menu-item>
          <a-menu-item key="12">オプション12</a-menu-item>
        </a-サブメニュー>
      </a-メニュー>
  </a-layout-sider>
    `
    <a-list 項目レイアウト="垂直" サイズ="大"
            :grid="{ ガター: 16, 列: 3 }" :data-source="ebooks1">
      <テンプレート #renderItem="{ アイテム }">
        <a-list-item キー="item.name">
          <テンプレート #アクション>
          <span v-for="{ type, text } アクション内" :key="type">
            <コンポーネント v-bind:is="type" style="margin-right: 8px"/>
            {{ 文章 }}
          </span>
          </テンプレート>
          <a-list-item-meta :description="item.description">
            <テンプレート #タイトル>
              <a :href="item.href" rel="外部nofollow" >{{ item.name }}</a>
            </テンプレート>
            <テンプレート #アバター><a-アバター :src="item.cover" /></テンプレート>
          </a-リスト項目メタ>
        </a-リスト項目>
      </テンプレート>
    </a-リスト>
  </a-レイアウト>
</テンプレート>

<script lang="ts">
'vue' から {defineComponent、onMounted、reactive、ref、toRef} をインポートします。
'axios' から axios をインポートします。
'@ant-design/icons-vue' から {LikeOutlined、MessageOutlined、StarOutlined} をインポートします。

const listData: レコード<文字列, 文字列>[] = [];

エクスポートデフォルトdefineComponent({
  コンポーネント:
    星のアウトライン、
    アウトラインのように、
    メッセージアウトライン、
  },
  名前: 'ホーム'、
  設定(){
    const ページネーション = {
      onChange: (ページ: 番号) => {
        console.log(ページ);
      },
      ページサイズ: 3,
    };
    constアクション: Record<文字列, 文字列>[] = [
      { タイプ: 'StarOutlined'、テキスト: '156' },
      { タイプ: 'LikeOutlined'、テキスト: '156' },
      { タイプ: 'MessageOutlined'、テキスト: '2' },
    ];
    console.log('セットアップ');
    //データバインディングにはrefを使用します。const ebooks=ref();
    // リアクティブデータバインディングを使用する const ebooks1 = reactive({books:[]})
    マウント時(()=>{
      axios.get("/ebook/list?name=").then(応答 => {
        console.log("マウントされた状態");
        定数データ = レスポンス.データ;
        ebooks.value = データコンテンツ;
        ebooks1.books = データコンテンツ;
        console.log(応答);
      })
    })
    戻る {
      ページネーション、
      行動、
      電子書籍1: 電子書籍、
      ebooks2: toRef(ebooks1, "書籍")
    }

  }
});
</スクリプト>
<スタイルスコープ>
.ant-レイアウト-サイダー {
  フロート: 左;
}

.ant-アバター{
  幅: 50px;
  高さ: 50px;
  行の高さ: 50px;
  境界線の半径: 8%;
  マージン: 5px 0;
}
</スタイル>

再コンパイルして再度開始すると、結果は次のようになります。

赤い円から、 axiosリクエスト アドレスが変更され、グローバル構成のメンテナンスが正常に達成されたことがわかります。

知識ポイント:

  • マルチ環境設定ファイルはWebルートディレクトリに配置する必要があります
  • .env.xxx 、サフィックス xxx はpackage.jsonのコマンドの–mode xxxに対応します。
  • 起動ポートを変更するには、–portパラメータを追加します。
  • カスタム変数はVUE_APP_で始まる必要があります
  • axios.defaults.baseURLを設定することで、バックエンドのIPポートまたはドメイン名を統一的に設定できます。

Vue3 の Vue CLI マルチ環境設定に関する記事はこれで終わりです。Vue CLI マルチ環境設定に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3+Vue-cli4 プロジェクトで Tencent スライダー検証コードを使用する方法
  • Vue3 の使用 (パート 1) Vue CLI プロジェクトの作成
  • Vue3.0 CLI - 3.2 ルーティングの基本チュートリアル
  • vue3.0 CLI - 2.5 - コンポーネントの3つの次元を理解する
  • vue3.0 CLI - 2.4 - 新しいコンポーネント Forms.vue のフォームについて学ぶ

<<:  HTML内のフレームセットタグが正常に表示されない原因の解析と解決方法

>>:  Harborを使用してプライベートDockerリポジトリを構築する方法

推薦する

Linux で開いているファイルが多すぎる問題を解決する方法

原因は、プロセスが特定の時点でシステム制限を超える数のファイルと通信リンクを開くことです。 システム...

Docker で lnmp をデプロイする詳細な手順

目次Centosイメージを取得するCentos ベースの nginx コンテナを生成するCentos...

Docker 経由で wsl の tar ファイルを作成する方法

最近VScodeのリモート開発機能をいじっています。Dockerのコンテナに接続できるほか、WSLに...

MySQL 5.7.21 解凍版のインストールと設定方法のグラフィックチュートリアル (win10)

MySQL 5.7.21 解凍版のインストールと設定方法は参考までに。具体的な内容は以下のとおりで...

MySQLクエリ書き換えプラグインの使用

クエリ書き換えプラグインMySQL 5.7.6 以降、MySQL Server は、サーバーが実行す...

Vue命令の実装原理の分析

目次1. 基本的な使い方2. 指示の動作原理2.1. 初期化2.2 テンプレートのコンパイル2.3....

WeChatミニプログラム公式顔認証の詳しい説明

ミニプログラムはユーザーの個人情報を収集してアップロードしましたが、拒否されました。こんにちは、ミニ...

HTML+CSS+JSはナビゲーションバーのスクロールグラデーション効果を実現します

目次まず効果を見てみましょう:成し遂げる:要約:まず効果を見てみましょう: 成し遂げる: 1. ナビ...

インデックスとテーブルリターンをカバーするMySQLの使い方

インデックスの2つの主要なカテゴリ使用されるストレージエンジン: MySQL 5.7 InnoDBク...

javascript:void(0) の意味と使用例

voidキーワードの紹介まず、void キーワードは JavaScript で非常に重要なキーワード...

フロントエンド Vue ユニットテストを始める

目次1. ユニットテストはなぜ必要なのでしょうか? 2. ユニットテストの書き方3. テストツール4...

IE 8/Chrome/Firefox と互換性のあるコメント返信ポップアップマスク効果実装アイデア

平日はニュースに注目して、テンセントをよく閲覧しています。しかし、コメントへの返信はほとんど見られま...

フロントエンド開発者は毎日HTMLタグの理解を学ばなければならない(1)

2.1 セマンティクス化により、Webページが検索エンジンに理解されやすくなりますこの章では、We...

MySQLデータベースに接続し、クエリ操作を実行するためのIDEAの完全なコード

1.まずMysqlリンク設定ページを書く パッケージ com.wretchant.fredis.me...

HTMLタグオーバーフロー処理アプリケーション

CSSを使用してスクロールバーを変更する1.コンテンツがオーバーフローした場合のオーバーフロー設定水...