今回は、実際のプロジェクトでのインストール プラグインの使用方法と、実際のプロジェクトでインストール プラグインを使用する際の注意点についてお届けします。以下は実践的なケースです。
このプラグインは、特にファイル名にハッシュ値が含まれており、この値がコンパイルされるたびに変化する場合に、Webpack バンドルを提供する HTML ファイルの作成を簡素化するために使用されます。このプラグインを使用して HTML ファイルを自動的に生成することも、lodash テンプレートを使用して生成されたバンドルをロードすることも、バンドルを自分でロードすることもできます。
実際のプロジェクトでインストールプラグインを使用する方法
このプラグインをインストールするにはnpmを使用します
$ npm install html-webpack-plugin@2 --save-dev
基本的な使用法
このプラグインは、body要素でスクリプトを使用してすべてのWebpackを含めます。バンドルを作成するには、Webpack 設定ファイルで以下を設定するだけです:
var HtmlWebpackPlugin = require('html-webpack-plugin') var webpackConfig = { entry: 'index.js', output: { path: 'dist', filename: 'index_bundle.js' }, plugins: [new HtmlWebpackPlugin()] }
これにより、次の内容を含む、index.html という名前のファイルが dist ディレクトリに自動的に生成されます:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Webpack App</title> </head> <body> <script src="index_bundle.js"></script> </body> </html>
複数の Webpack エントリ ポイントがある場合、それらは生成されたスクリプト要素。
Webpack 出力に CSS リソースが含まれている場合 (たとえば、ExtractTextPlugin を使用して抽出された CSS)、これらはリンクを使用して HTML ページの head 要素に含まれます。
Configuration
は一連の設定を実行でき、次の設定情報をサポートします
title: ページのタイトル要素の生成に使用されます
filename: 出力HTMLファイル名、デフォルトはindexです.html、サブディレクトリを使用して直接設定することもできます。
template: テンプレート ファイル パス、html!./index.html
などのローダーをサポート、すべてのリソースを特定のテンプレートまたは templateContent に挿入します。 true または body に設定すると、すべての JavaScript リソースが body 要素の下部に配置され、「head」が head 要素に配置されます。
favicon: 出力 HTML ファイルに特定の favicon パスを追加します。
minify: {} | false、出力を縮小するための html-minifier オプションを渡します
hash: true | false、true の場合、含まれるすべてのスクリプトと CSS ファイルに一意の Webpack コンパイル済みハッシュを追加します。キャッシュ。
cache: true | false、true の場合、これがデフォルト値であり、ファイルは変更された後にのみ公開されます。
showErrors: true | false、true の場合、これがデフォルト値であり、エラー メッセージが HTML ページに書き込まれます
chunks: 特定のチャンクのみを追加できます (たとえば、単体テスト チャンクのみ) )
chunksSortMode: ページに追加する前にチャンクを並べ替える方法を制御できます。サポートされる値: 'none' | 'default' {function}-default:'auto'
excludeChunks: スキップできます。特定のチャンク (単体テストのブロックをスキップするなど)
以下の例は、これらの構成の使用方法を示しています。
{ entry: 'index.js', output: { path: 'dist', filename: 'index_bundle.js', hash: true }, plugins: [ new HtmlWebpackPlugin({ title: 'My App', filename: 'assets/admin.html' }) ] }
複数の HTML ファイルを生成する
このプラグインを設定ファイルに複数回追加することで、複数の HTML ファイルを生成します。
{ entry: 'index.js', output: { path: 'dist', filename: 'index_bundle.js' }, plugins: [ new HtmlWebpackPlugin(), // Generates default index.html new HtmlWebpackPlugin({ // Also generate a test.html filename: 'test.html', template: 'src/assets/test.html' }) ] }
カスタム テンプレートを作成する
デフォルトで生成された HTML ファイルがニーズに合わない場合は、独自のカスタマイズされたテンプレートを作成できます。便利な方法は、inject オプションを渡してから、それをカスタム HTML ファイルに渡すことです。 html-webpack-plugin は、必要なすべての CSS、js、マニフェスト、および favicon ファイルをマークアップに自動的に挿入します。
plugins: [ new HtmlWebpackPlugin({ title: 'Custom template', template: 'my-index.html', // Load a custom template inject: 'body' // Inject all scripts into the body }) ]
my-index.html ファイル
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> <title><%= htmlWebpackPlugin.options.title %></title> </head> <body> </body> </html>
テンプレート ローダーがある場合は、それを使用してこのテンプレートを解析できます。
module: { loaders: [ { test: /\.hbs$/, loader: "handlebars" } ] }, plugins: [ new HtmlWebpackPlugin({ title: 'Custom template using Handlebars', template: 'my-index.hbs', inject: 'body' }) ]
また、パターンが文字列の場合は、templateContent を使用してそれを渡すことができます。
plugins: [ new HtmlWebpackPlugin({ inject: true, templateContent: templateContentString }) ]
注入機能がニーズに合わず、リソースの配置を完全に制御したい場合。 独自のテンプレートを作成するための開始点としてデフォルトのテンプレートを使用し、lodash 構文を直接使用できます。
templateContent オプションは、jade:
plugins: [ new HtmlWebpackPlugin({ templateContent: function(templateParams, compilation) { // Return your template content synchronously here return '..'; } }) ]
や非同期バージョン
plugins: [ new HtmlWebpackPlugin({ templateContent: function(templateParams, compilation, callback) { // Return your template content asynchronously here callback(null, '..'); } }) ]
などの他の言語を使用するための関数にすることもできます。template と templateContent を一緒に使用すると、プラグインはエラーをスローすることに注意してください。
变量 o 在模板中是在渲染时传递进来的数据,这个变量有如下的属性:
1、htmlWebpackPlugin: 这个插件的相关数据 ◦
htmlWebpackPlugin.files: 资源的块名,来自 webpack 的 stats 对象,包含来自 entry 的从 entry point name 到 bundle 文件名映射。
"htmlWebpackPlugin": { "files": { "css": [ "main.css" ], "js": [ "assets/head_bundle.js", "assets/main_bundle.js"], "chunks": { "head": { "entry": "assets/head_bundle.js", "css": [ "main.css" ] }, "main": { "entry": "assets/main_bundle.js", "css": [] }, } } }
如果在 webpack 配置文件中,你配置了 publicPath,将会反射正确的资源
htmlWebpackPlugin.options: 传递给插件的配置。
2、webpack: webpack 的 stats 对象。
3、webpackConfig: webpack 配置信息。
过滤块
可以使用 chunks 来限定特定的块。
plugins: [ new HtmlWebpackPlugin({ chunks: ['app'] }) ]
还可以使用 excludeChunks 来排除特定块。
plugins: [ new HtmlWebpackPlugin({ excludeChunks: ['dev-helper'] }) ]
事件
通过事件允许其它插件来扩展 HTML。
html-webpack-plugin-before-html-processing
html-webpack-plugin-after-html-processing
html-webpack-plugin-after-emit
使用方式:
compilation.plugin('html-webpack-plugin-before-html-processing', function(htmlPluginData, callback) { htmlPluginData.html += 'The magic footer'; callback(); });
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上が実際のプロジェクトでインストール プラグインを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。