Vue-CLI マルチページディレクトリパッケージ化手順の記録

Vue-CLI マルチページディレクトリパッケージ化手順の記録

ページディレクトリ構造

デフォルトの HTML テンプレート ファイル public/index.html をルート ディレクトリに移動する必要があることに注意してください。

依存関係をインストールする

npm i --save-dev クロス環境タスクファイル

ビルド/pages.js

Vue CLI に必要なマルチページオブジェクトを取得する

定数パス = require('path')
const glob = require('glob')
定数 fs = require('fs')

const isProduction = process.env.NODE_ENV === 'production'

// 異なるモジュールのページタイトルをカスタマイズする
const タイトルマップ = {
  インデックス: 'ホーム'
}

関数 getPages (globPath) {
  定数ページ = {}
  glob.sync(globPath).forEach((item) => {
    定数統計 = fs.statSync(アイテム)
    (stats.isDirectory())の場合{
      定数 basename = path.basename(item, path.extname(item))

      // モジュールディレクトリに index.html がある場合は、そのファイルを HTML テンプレートファイルとして使用します。const template = fs.existsSync(`${item}/index.html`)
        ? `${item}/index.html`
        : path.join(__dirname, '../index.html')

      pages[ベース名] = {
        エントリ: `${item}/main.js`、
        タイトル: titleMap[basename] || 'デフォルトページ',
        テンプレート、
        // このコード行は非常に重要です // 開発と本番で互換性があります。HTML ページ階層は一貫しています filename: isProduction ? 'index.html' : `${basename}/index.html`
      }
    }
  })
  ページを返す
}

const pages = getPages(path.join(__dirname, '../src/pages/*'))

module.exports = ページ

ビルド/index.js

ビルド コマンドを実行し、vue-cli-service ビルドをループします。

const チョーク = require('チョーク')
const rimraf = require('rimraf')
const { sh } = require('tasksfile')

const PAGES = require('./pages')

// vue-cli-service --mode 値 const mode = process.env.MODE || 'prod'

// モジュール名(複数可) const moduleNames = process.argv[2]

// すべてのページのリスト const pageList = Object.keys(PAGES)

// 有効なモジュールリストが指定されていない場合は、すべてのページのリストになります const validPageList = moduleNames ? moduleNames.split(',').filter((item) => pageList.includes(item)) : pageList
ページリストの長さが正しい場合
  console.log(chalk.red('**モジュール名が正しくありません**'))
  戻る
}

console.log(chalk.blue(`有効なモジュール:${validPageList.join(',')}`))

// distディレクトリを削除する rimraf.sync('dist')

console.time('合計コンパイル時間')
定数 count = 有効なページリスト.長さ
電流を0にする
// モジュールのコンパイルを1つずつ実行します for (let i = 0; i < validPageList.length; i += 1) {
  定数モジュール名 = 有効なページリスト[i]
  process.env.MODULE_NAME = モジュール名

  console.log(chalk.blue(`${moduleName} モジュールのコンパイルを開始しました`))

  // vue-cli-service build でコンパイル sh(`vue-cli-service build --mode ${mode}`, { async: true }).then(() => {
    console.log(chalk.blue(`${moduleName} モジュールのコンパイルが完了しました`))
    コンソールログ()
    現在の += 1
    if (現在のカウント === ) {
      console.log(chalk.blue('-----すべてのモジュールがコンパイルされました-----'))
      console.timeEnd('合計コンパイル時間')
    }
  })
}

ビルド/dev-modules.js

ローカル開発用にコンパイルする必要があるモジュールをカスタマイズします。モジュール名は、src/pages の下のフォルダー名です。

// ローカル開発用にコンパイルする必要があるモジュール module.exports = [

]

設定ファイル

const チョーク = require('チョーク')

const devModuleList = require('./build/dev-modules')

const isProduction = process.env.NODE_ENV === 'production'

// 合計ページ数 const PAGES = require('./build/pages')

(const ベース名 in PAGES) {
  if (Object.prototype.hasOwnProperty.call(PAGES, ベース名)) {
    PAGES[ベース名].chunks = [
      「チャンクビュー」、
      「チャンクベンダー」
      「チャンクコモン」、
      `${ベース名}`
    ]
  }
}

ページを {} にします
定数 moduleName = process.env.MODULE_NAME

if (isProduction) {
  // モジュールの名前を構築します if (!PAGES[moduleName]) {
    console.log(chalk.red('**モジュール名が正しくありません**'))
    戻る
  }
  pages[モジュール名] = PAGES[モジュール名]
} それ以外 {
  // ローカル開発コンパイル済みモジュール // すべてをコンパイル if (process.env.DEV_MODULE === 'all') {
    ページ = ページ
  } それ以外 {
    // いくつかのモジュールをコンパイルする const moduleList = [
      // コンパイルされたモジュール 'index' を修正しました。
      'ログイン'、
      // カスタムコンパイルされたモジュール...devModuleList
    ]
    モジュールリスト.forEach(item => {
      pages[item] = ページ[item]
    })
  }
}

モジュール.エクスポート = {
  // このコード行は非常に重要です publicPath: isProduction ? './' : '/',
  ページ、
  // このコード行は非常に重要です outputDir: isProduction ? `dist/${moduleName}` : 'dist',
  プロダクションソースマップ: false、
  css: {
    ローダーオプション: {
      サス: {
        prependData: '@import "~@/styles/variables.scss";'
      }
    }
  },
  チェーンWebpack: (config) => {
    config.optimization.splitChunks({
      キャッシュグループ:
        ビュー: {
          名前: 'chunk-vue'、
          テスト: /[\\/]node_modules[\\/]_?(vue|vue-router|vuex|element-ui)(@.*)?​​[\\/]/,
          優先度: -1、
          チャンク: '初期'
        },
        ベンダー:
          名前: 'チャンクベンダー'、
          テスト: /[\\/]node_modules[\\/]/,
          優先度: -10、
          チャンク: '初期'
        },
        一般:
          名前: 'チャンク共通'、
          最小チャンク数: 2,
          優先度: -20、
          チャンク: 'initial'、
          既存のチャンクを再利用: true
        }
      }
    })
  }
}

パッケージ.json

{
  「スクリプト」: {
    "サーブ": "vue-cli-service サーブ",
    "serve:all": "クロス環境 DEV_MODULE=all vue-cli-service serve",
    "build:test": "クロス環境 MODE=test node build/index.js",
    "build:prod": "クロス環境 MODE=prod node build/index.js",
    "lint": "vue-cli-service lint",
  }
}

地域開発

ローカルで開発する場合、npm run serve はカスタム モジュール ディレクトリをコンパイルし、npm run serve:all はすべてのモジュール ディレクトリをコンパイルします。

ローカル開発中にコンパイルした後のディレクトリ構造は次のようになります。

したがって、起動後にアドレスを http://localhost:8080/index/index.html に変更する必要があります。

パッケージング結果

ビルド時に、 npm run build:prodすべてのページをパッケージ化し、 npm run build:prod indexインデックス ページのみをパッケージ化します。

パッケージ化されたディレクトリ構造は次のとおりです。

このように、異なるモジュール間をジャンプするときに、一貫した相対パスジャンプ方法 ../index/index.html を使用できます。

パッケージ化後、各モジュールの内容は個別のディレクトリにパッケージ化されます。

Githubアドレス

要約する

Vue-CLI マルチページ ディレクトリ パッケージングに関するこの記事はこれで終わりです。Vue-CLI マルチページ ディレクトリ パッケージングに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue-cli 3 構成パッケージの最適化ポイントについて(推奨)
  • vue-cli3 マルチ環境パッケージ構成の詳細な説明
  • vue-cli スキャフォールディングパッケージ化後にベンダーファイルが大きくなりすぎる問題を解決します
  • HBuilderx を使用して vue-cli でアプリをパッケージ化する際の問題
  • Electron を使用して vue-cli プロジェクトを exe にパッケージ化する方法
  • vue-cli のパッケージ化されたイメージ パスのエラーの解決方法
  • vue-cli をパッケージ化して起動する方法の例
  • vue-cli3 環境変数と環境パッケージの例

<<:  MySQLデータベースの増分バックアップのアイデアと方法

>>:  MySQL スロークエリログの設定と使用方法のチュートリアル

推薦する

DockerでLinuxシェルコマンドを実行する方法

Docker でシェル コマンドを実行するには、コマンドの前に sh -c を追加する必要があります...

Linux Autofs 自動マウント サービスのインストールと展開のチュートリアル

目次1. autofs サービスの紹介2. Autofsのインストールと展開3. Autofs効果の...

Windows で MySQL 5.7.17 をインストールし、エンコードを utf8 に設定する方法

ダウンロードMySQL 公式ダウンロード、Windows (x86、64 ビット)、ZIP アーカイ...

MySQL DISTINCTの基本実装原理の詳細な説明

序文DISTINCT は、GROUP BY 操作の実装と非常によく似ていますが、GROUP BY の...

MySQLの外部結合と内部結合クエリの違い

外部結合の構文は次のとおりです。フィールド名を選択FROM テーブル名 1 LEFT|RIGHT|F...

Centos に MYSQL8.X をインストールするチュートリアル

MySQLのインストール(4、5、6は省略可能)ステートメント: CentOS のバージョンは 7....

MySQLでJSONフィールドを操作する方法

MySQL 5.7.8 では json フィールドが導入されました。このタイプのフィールドは使用頻度...

テーブルリストを破棄するには、標準のdl、dt、ddタグを使用します。

現在、ますます多くのフロントエンド開発者が、元のテーブル レイアウトを xHTML + CSS に置...

スーパーバイザーによるDockerfileのマルチサービスイメージパッケージ操作

Dockerfileの作成yumソースを設定する cd /tmp/docker vim Docker...

MySQLでクエリキャッシュを実行する方法と失敗を解決する方法

関数を使用する前にパラメータのプロパティを理解して、関数の使い方をより深く理解する必要があることは誰...

MySQL スロークエリログの有効化と設定

導入MySQL スロー クエリ ログは、問題のある SQL ステートメントのトラブルシューティングや...

mysql データ型変換の実装

1. 問題下図のような表があり、結果値がreference_high値より大きいデータを見つける必要...

HTMLページの読み込み速度を上げる方法

(1)HTTPリクエストを減らす。 (リソース ファイルをマージし、イメージ スプライトを使用します...

ブラウザをJavaScriptで対話させる方法

目次1. 最も単純な例2. 音声の速度とピッチをカスタマイズする3. 音量の調整方法4. よく使われ...

階層化されたピラミッドを実現するための HTML+CSS の例

この記事では主に、HTML+CSS で階層化ピラミッドを実装する例を紹介し、皆さんと共有します。詳細...