Webpackを使用して複数ページのプログラムを構築するための実装手順

Webpackを使用して複数ページのプログラムを構築するための実装手順

webpack を使用してシングルページのプログラムを構築することは非常に一般的ですが、実際の開発では複数ページのプログラムを開発する必要もあるため、webpack を使用して複数ページのプログラムを構築する方法を勉強しました。

原理

各ページが配置されているフォルダーを個別の単一ページ プログラム ディレクトリとして扱い、複数のエントリと html-webpack-plugin を構成して複数ページのパッケージ化を実現します。

以下はこのプロジェクトのディレクトリ構造です

。
├─ 出典
│ └─ ページ
│ ├─ について
│ │ ├─ index.css
│ │ ├─ index.html
│ │ └─ index.js
│ └─ インデックス
│ ├─ index.css
│ ├─ 索引.html
│ └─ index.js
└─ webpack.config.js

シングルページパッケージの基本構成

まず、シングルページアプリケーション用の webpack の基本構成を見てみましょう。

HtmlWebpackPlugin は 'html-webpack-plugin' を必要とします。

モジュール.エクスポート = {
 エントリ: './src/index.js',
 プラグイン: [
  新しいHtmlWebpackプラグイン({
   テンプレート: './src/index.html',
   ファイル名: 'index.html',
  })、
 ]、
 出力: {
  パス: path.resolve(__dirname, './dist'),
  ファイル名: 'bundle.js',
 },
};

複数ページのアプリケーションに変更するには、単一エントリと単一 HTML テンプレートを複数エントリと複数 HTML テンプレートに変更する必要があります。

マルチページパッケージの基本構成

改修工事の入り口

従来の複数エントリの記述は、キーと値のペアの形式で記述できます。

モジュール.エクスポート = {
 エントリー: {
  インデックス: './src/pages/index/index.js',
  about: './src/pages/about/index.js',
 },
 ...
}

このように記述すると、ページが追加されるたびに手動でエントリを追加する必要があり、面倒です。そのため、ディレクトリに基づいてエントリを生成する関数を定義して、操作を簡素化することができます。

定数glob = require('glob');

関数 getEntry() {
 定数エントリ = {};
 glob.sync('./src/pages/**/index.js').forEach((ファイル) => {
  定数name = file.match(/\/pages\/(.+)\/index.js/)[1];
  entry[name] = ファイル;
 });
 戻りエントリ。
}

モジュール.エクスポート = {
 エントリ: getEntry(),
 ...
}

変換出力

出力設定では、出力ファイル名をハードコードすることは適切ではなくなったため、ソースファイル名と一致するように名前を変更する必要があります。

モジュール.エクスポート = {
 ...
 出力: {
  パス: path.resolve(__dirname, './dist'),
  ファイル名: 'js/[name].[contenthash].js',
 },
 ...
}

複数のhtml-webpack-pluginsを設定する

エントリと同様に、異なるHTMLテンプレートをプラグイン設定に直接書き込むことができます。ここでは、jsが間違ったHTMLに挿入されるのを防ぐために、プラグインごとに異なるチャンクを設定する必要があります。

HtmlWebpackPlugin は 'html-webpack-plugin' を必要とします。

モジュール.エクスポート = {
 ...
 プラグイン: [
  新しいHtmlWebpackプラグイン({
   テンプレート: './src/pages/index/index.html',
   チャンク: ['インデックス'],
   ファイル名: 'index.html',
  })、
  新しいHtmlWebpackプラグイン({
   テンプレート: './src/pages/about/index.html',
   チャンク: ['約'],
   ファイル名: 'about.html',
  })、
 ]、
 ...
};

このアプローチはエントリと同じ問題を抱えているため、この構成を生成するための別の関数を定義します。

HtmlWebpackPlugin は 'html-webpack-plugin' を必要とします。
const glob = require('glob');

関数 getHtmlTemplate() {
 グロブを返す
  .sync('./src/pages/**/index.html')
  .map((ファイル) => {
   戻り値: name: file.match(/\/pages\/(.+)\/index.html/)[1], path: file };
  })
  。地図(
   (テンプレート) =>
    新しいHtmlWebpackプラグイン({
     テンプレート: template.path、
     チャンク: [template.name.toString()],
     ファイル名: `${template.name}.html`,
    })
  );
}

 
モジュール.エクスポート = {
 ...
 プラグイン: [...getHtmlTemplate()],
 ...
};

このようなシンプルなマルチページプロジェクトが構成されました。これをベースにホットアップデートやコード分割などの機能を追加することもできます。ご興味があれば、ぜひご自身で試してみてください。

完全な構成

プロジェクトアドレス: xmy6364/webpack-multipage

// webpack.config.js

定数パス = require('path');
HtmlWebpackPlugin は 'html-webpack-plugin' を必要とします。
const glob = require('glob');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

//複数ページエントリ関数 getEntry() {
 定数エントリ = {};
 glob.sync('./src/pages/**/index.js').forEach((ファイル) => {
  定数name = file.match(/\/pages\/(.+)\/index.js/)[1];
  entry[name] = ファイル;
 });
 戻りエントリ。
}

// 複数ページテンプレート関数 getHtmlTemplate() {
 グロブを返す
  .sync('./src/pages/**/index.html')
  .map((ファイル) => {
   戻り値: name: file.match(/\/pages\/(.+)\/index.html/)[1], path: file };
  })
  。地図(
   (テンプレート) =>
    新しいHtmlWebpackプラグイン({
     テンプレート: template.path、
     チャンク: [template.name.toString()],
     ファイル名: `${template.name}.html`,
    })
  );
}

定数設定 = {
 モード: 'production'、
 エントリ: getEntry(),
 出力: {
  パス: path.resolve(__dirname, './dist'),
  ファイル名: 'js/[name].[contenthash].js',
 },
 モジュール: {
  ルール:
   {
    テスト: /\.css$/,
    使用: ['style-loader', 'css-loader'],
   },
  ]、
 },
 プラグイン: [新しい CleanWebpackPlugin()、...getHtmlTemplate()]、
 開発サーバー: {
  コンテンツベース: path.join(__dirname, 'dist'),
  圧縮: true、
  ポート: 3000、
  ホット:本当、
  オープン: 真、
 },
};

モジュールをエクスポートします。

これで、Webpack を使用して複数ページのプログラムを構築する実装手順に関するこの記事は終了です。Webpack を使用した複数ページの構築に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Electron-vueはwebpackを使用して複数ページのエントリファイルをパッケージ化します
  • webpackコード断片化の実装
  • Webpack プロジェクトでローダー プラグインをデバッグする方法
  • Webpackプラグインを書いてnpmに公開するための80行のコード
  • Webpack コンポーネントの使用状況統計を実装するための 50 行のコード
  • webpack -v エラー解決

<<:  MySQL で遅い SQL 文を見つける方法

>>:  Linux C ログ出力コード テンプレート サンプル コード

推薦する

jQueryはすべてのショッピングカート機能を実装します

目次1. すべて選択2. 商品の数量を増やすか減らす3. 商品の小計を変更する4. 合計と合計額を計...

ダイナミッククロックを実現するJS+CSS

この記事の例では、動的な時計を実装するためのJS + CSSの具体的なコードを参考までに共有していま...

Taobao の商品画像切り替え効果を実現する JavaScript

JavaScriptの服装アルバム切り替え効果(Taobao商品画像切り替えに似ています)、参考ま...

CSSで半透明の背景色を実現する2つの方法について簡単に説明します。

ページをレイアウトする際、ユーザーに異なる視覚効果を与えるために、div の背景色を半透明の状態に設...

scss で mixin が動作しない問題の解決方法 (ブラウザでコンパイルできない)

ミックスインメソッド: ブラウザはコンパイルできません: 以前のバージョンのsassでは上記の記述方...

Vueはシンプルな計算機能を実装します

この記事では、参考までに、簡単な計算機機能を実現するためのVueの具体的なコードを紹介します。具体的...

Apache POIの基本的な使い方の詳しい説明

目次基本的な紹介入門テスト (Excel ファイルからのデータの読み取り)ステップ1: Maven座...

Docker データ ストレージ tmpfs マウントの詳細な説明

この記事を読む前に、ボリュームとバインドマウントの基本を理解しておいてください。詳細については、次の...

PostgreSQL データベースにおける varchar、char、text の比較に関する簡単な説明

以下のように表示されます。名前説明する文字可変(n)、varchar(n)長さ制限あり、可変長文字(...

Webデザインチュートリアル(1):手順と全体レイアウト

<br />注:ウェブサイトの種類を示すものを除くすべてのテキストは、企業サイト用です。...

divとspanの違いと使い方

目次1. DIVとSPANの違いと特徴2. スパンタグの概要3. 拡大と改善4. 凡例の効果の実証例...

Nginx を使用して DoNetCore を Alibaba Cloud にデプロイする方法

基本的な環境設定まずはご自身でドメイン名とサーバーを購入してくださいクラウドサーバーECSに基づいて...

HTML ドラッグ アンド ドロップ機能の実装コード

Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...

Tomcat を再デプロイした後にイメージやその他のリソースが自動的に削除される問題を解決します

昨日は写真をアップロードしてリンクを返す機能を実装していました。プロジェクトが Tomcat に再デ...

最新の人気スクリプトAutojsソースコード共有

今日は、最新の人気スクリプト 50 個を含むソース コードを共有します。現在、Mine Guard ...