Heim >Web-Frontend >js-Tutorial >Ausführliche Erläuterung der Verwendung des Webpack-Plug-ins html-webpack-plugin-Beispiel

Ausführliche Erläuterung der Verwendung des Webpack-Plug-ins html-webpack-plugin-Beispiel

php中世界最好的语言
php中世界最好的语言Original
2018-05-25 15:22:571911Durchsuche

Dieses Mal werde ich Ihnen ein detailliertes Beispiel für die Verwendung des Webpack-Plug-Ins HTML-Webpack-Plugin geben Praktische Fälle, werfen wir einen Blick darauf. Dieses Plugin wird verwendet, um die Erstellung von HTML-Dateien zu vereinfachen, die Webpack-Bundles bereitstellen, insbesondere wenn der Dateiname einen Hash-Wert enthält und dieser Wert sich bei jeder Kompilierung ändert. Sie können sich entweder von diesem Plugin automatisch bei der Generierung von HTML-Dateien helfen lassen, Lodash-Vorlagen verwenden, um die generierten Bundles zu laden, oder die Bundles selbst laden.

Installation

Verwenden Sie npm, um dieses Plugin zu installieren

$ npm install html-webpack-plugin@2 --save-dev

Grundlegende Verwendung

Dieses Plugin kann helfen Generieren Sie eine HTML-Datei, verwenden Sie im Body-Element ein Skript, um alle Ihre Webpack-Bundles einzubinden. Konfigurieren Sie einfach Folgendes in Ihrer Webpack-

Konfigurationsdatei

:

var HtmlWebpackPlugin = require('html-webpack-plugin')
var webpackConfig = {
 entry: 'index.js',
 output: {
  path: 'dist',
  filename: 'index_bundle.js'
 },
 plugins: [new HtmlWebpackPlugin()]
}
Dies wird automatisch im dist-Verzeichnis Generate sein eine Datei namens index.html mit folgendem Inhalt:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>Webpack App</title>
 </head>
 <body>
  <script src="index_bundle.js"></script> 
 </body>
</html>

Wenn Sie mehrere Webpack-Einstiegspunkte haben, werden diese alle in das generierte Skriptelement aufgenommen.

Wenn in der Webpack-Ausgabe CSS-Ressourcen enthalten sind (z. B. mit ExtractTextPlugin extrahiertes CSS), werden diese über Links in das Head-Element der HTML-Seite eingefügt.

Konfiguration

kann eine Reihe von Konfigurationen durchführen und unterstützt die folgenden Konfigurationsinformationen

    Titel: wird zum Generieren von Seitentiteln verwendet Element
  1. Dateiname: HTML-Dateiname ausgeben, der Standardwert ist index.html, es kann auch direkt mit Unterverzeichnissen konfiguriert werden.
  2. Vorlage: Pfad der Vorlagendatei, unterstützt Loader, z. B. html!./index.html
  3. inject: true | 'body' |. false, alle Ressourcen in eine bestimmte Vorlage oder einen bestimmten TemplateContent einfügen. Wenn auf true oder body gesetzt, werden alle
  4. Javascript

    -Ressourcen am Ende des Body-Elements platziert und „head“ wird platziert am unteren Rand des Körperelements.

  5. Favicon: Fügen Sie der Ausgabe-HTML-Datei einen bestimmten Favicon-Pfad hinzu.
  6. minify: {} |. false, übergeben Sie die HTML-Minifier-Option, um die Ausgabe zu minimieren.
  7. hash: true | Ein einzigartiger Webpack-Build-Hash für alle enthaltenen Skripte und CSS-Dateien, nützlich zum Entcachen.
  8. cache: true |. false, wenn true, ist dies der Standardwert und die Datei wird erst veröffentlicht, nachdem die Datei geändert wurde.
  9. showErrors: true |. false, wenn true, ist dies der Standardwert,
  10. Fehlermeldung

    wird auf die HTML-Seite geschrieben

  11. Chunks: Ermöglicht das Hinzufügen nur bestimmter Chunks (z. B. nur Unit-Test-Chunks)
  12. chunksSortMode: Ermöglicht die Steuerung, wie Chunks sortiert werden, bevor sie der Seite hinzugefügt werden. Unterstützte Werte : 'none' |. 'default' |. {function}-default:'auto'
  13. excludeChunks: Ermöglicht das Überspringen bestimmter Chunks (z. B. das Überspringen von
  14. Unit-Tests

    ). block)

  15. Das folgende Beispiel zeigt, wie diese Konfigurationen verwendet werden.
{
 entry: 'index.js',
 output: {
  path: 'dist',
  filename: 'index_bundle.js',
  hash: true
 },
 plugins: [
  new HtmlWebpackPlugin({
   title: 'My App',
   filename: 'assets/admin.html'
  })
 ]
}

Generieren Sie mehrere HTML-Dateien

Generieren Sie mehrere HTML-Dateien, indem Sie dieses Plugin mehrmals in der Konfigurationsdatei hinzufügen.

{
 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'
  })
 ]
}

Benutzerdefinierte Vorlagen schreiben

Wenn die standardmäßig generierte HTML-Datei nicht Ihren Anforderungen entspricht, können Sie Ihre eigene benutzerdefinierte Vorlage erstellen. Eine bequeme Möglichkeit besteht darin, die Injektionsoption zu übergeben und sie dann an eine benutzerdefinierte HTML-Datei zu übergeben. Das HTML-Webpack-Plugin fügt automatisch alle erforderlichen CSS-, JS-, Manifest- und Favicon-Dateien in das Markup ein.

plugins: [
 new HtmlWebpackPlugin({
  title: 'Custom template',
  template: 'my-index.html', // Load a custom template 
  inject: 'body' // Inject all scripts into the body 
 })
]

meine-index.html-Datei

<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
  <title><%= htmlWebpackPlugin.options.title %></title>
 </head>
 <body>
 </body>
</html>

Wenn Sie einen Vorlagenlader haben, können Sie ihn zum Parsen dieser Vorlage verwenden.

module: {
 loaders: [
  { test: /\.hbs$/, loader: "handlebars" }
 ]
},
plugins: [
 new HtmlWebpackPlugin({
  title: 'Custom template using Handlebars',
  template: 'my-index.hbs',
  inject: 'body'
 })
]

Wenn Ihr Muster außerdem ein

String

ist, können Sie es mit templateContent übergeben.

plugins: [
 new HtmlWebpackPlugin({
  inject: true,
  templateContent: templateContentString
 })
]

如果 inject 特性不适合你的需要,你希望完全控制资源放置。 可以直接使用 lodash 语法,使用  default template 作为起点创建自己的模板。

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。

  1. html-webpack-plugin-before-html-processing

  2. html-webpack-plugin-after-html-processing

  3. html-webpack-plugin-after-emit

使用方式:

compilation.plugin('html-webpack-plugin-before-html-processing', function(htmlPluginData, callback) {
 htmlPluginData.html += 'The magic footer';
 callback();
});

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎样搭建vue2.0+boostrap项目

Angular入口组件与声明式组件案例对比

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Verwendung des Webpack-Plug-ins html-webpack-plugin-Beispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn