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 スロークエリログの設定と使用方法のチュートリアル

推薦する

MySQL でテーブルを削除する 3 つの方法 (要約)

ドロップテーブルドロップはテーブル情報を直接削除するため、最も高速ですが、データを取得することはでき...

Nginx の構成と HTTP 実装コード分析との互換性

OpenSSL を使用して SSL キーと CSR ファイルを生成するHTTPS を設定するには、秘...

Linux環境でglogログライブラリを使用する方法

Linuxライブラリを生成するLinux版はcentos7.3を使用し、コンパイルしてライブラリを生...

WindowsでiTunesのバックアップパスを変更する方法

0. 準備: • iTunesを閉じる• タスクマネージャーでiTunesから始まるサービスを終了し...

MySQL のレイテンシ問題とデータフラッシュ戦略プロセスの分析

目次1. MySQLレプリケーションプロセス2. MySQLの遅延問題の分析3. プロモーション期間...

Linuxコマンドをバックグラウンドで実行する方法

通常、ターミナルでコマンドを実行する場合、別のコマンドの入力を開始する前に、現在のコマンドが終了する...

VueでJSXを使用する方法

JSXとは何かJSX は Javascript の構文拡張であり、JSX = Javascript ...

elementui での el-cascader カスケードセレクタの実践

目次1. 効果2. メインコード1. 効果機能: インターフェイスから取得したデータを使用してオプシ...

Springboot プロジェクトの Docker-compose イメージリリースプロセス分析

導入Docker-Compose プロジェクトは、Docker コンテナ クラスターの迅速なオーケス...

Vue でフルスクリーンを実装し、フルスクリーン終了を監視する

目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...

WeChatアプレットはふるいを振る効果を実現

この記事では、WeChatアプレットの具体的なコードを参考までに共有します。具体的な内容は次のとおり...

JavaScript はクリックして画像の形状を変更する (変換アプリケーション) を実装します。

JavaScriptをクリックすると画像の形状が変わります(変形の応用)。参考までに具体的な内容は...

マウスで画像を動かすJavaScript

この記事では、マウスの動きに追従する画像を実現するためのJavaScriptの具体的なコードを参考ま...

数十億のデータに対するMySQLページングの最適化に関する簡単な説明

目次背景分析するデータシミュレーション1. 従業員テーブルと部門テーブルの2つのテーブルを作成します...

Nginx の書き換え正規マッチング書き換え方法の例

Nginx の書き換え機能は、リダイレクトと同様に、URL アドレスを一時的または永続的に新しい場所...