Maison >interface Web >js tutoriel >Explication détaillée de l'utilisation du plug-in Webpack, exemple html-webpack-plugin

Explication détaillée de l'utilisation du plug-in Webpack, exemple html-webpack-plugin

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

Cette fois, je vais vous apporter un exemple détaillé d'utilisation du plug-in webpack html-webpack-plugin Quelles sont les précautions lors de l'utilisation du plug-in webpack html-webpack-plugin. est un cas pratique, jetons-y un coup d'œil.

Ce plugin est utilisé pour simplifier la création de fichiers HTML qui servent des bundles webpack, notamment lorsque le nom du fichier contient une valeur de hachage, et cette valeur change à chaque fois qu'il est compilé. Vous pouvez soit laisser ce plugin vous aider à générer automatiquement des fichiers HTML, utiliser des modèles lodash pour charger les bundles générés, soit charger les bundles vous-même.

Installation

Utilisez npm pour installer ce plug-in

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

Utilisation de base

Ce plug-in peut Pour aider à générer des fichiers HTML, dans l'élément body, utilisez un script pour inclure tous vos bundles webpack. Configurez simplement les éléments suivants dans votre webpack fichier de configuration  :

var HtmlWebpackPlugin = require('html-webpack-plugin')
var webpackConfig = {
 entry: 'index.js',
 output: {
  path: 'dist',
  filename: 'index_bundle.js'
 },
 plugins: [new HtmlWebpackPlugin()]
}

. Cela générera automatiquement un fichier nommé index.html dans le répertoire dist avec le contenu suivant :

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

Si vous avez plusieurs points d'entrée du webpack, ils seront tous inclus dans l'élément de script généré.

Si des ressources CSS sont incluses dans la sortie du webpack (par exemple, des CSS extraites à l'aide d'ExtractTextPlugin), celles-ci seront incluses dans l'élément d'en-tête de la page HTML à l'aide de liens.

Configuration

peut effectuer une série de configurations et prend en charge les informations de configuration suivantes

  1. titre : utilisé pour générer le titre des pages élément

  2. filename : nom du fichier HTML de sortie, la valeur par défaut est index.html, il peut également être directement configuré avec des sous-répertoires.

  3. modèle : chemin du fichier modèle, prend en charge le chargeur, tel que html!./index.html

  4. inject : true 'head' | 'body' | false , injecte toutes les ressources dans un modèle ou templateContent spécifique. Si défini sur true ou body, toutes les ressources javascript seront placées au bas de l'élément body, et 'head' sera placé. au bas de l’élément body dans l’élément head.

  5. favicon : ajoutez un chemin de favicon spécifique au fichier HTML de sortie.

  6. minify : {} | false, passez l'option html-minifier pour minifier la sortie

  7. hash : true false, si vrai, ajoute un hachage de construction Webpack unique pour tous les scripts et fichiers CSS inclus, utile pour la mise en cache.

  8. cache : true | false, si vrai, c'est la valeur par défaut et le fichier ne sera publié qu'après modification du fichier.

  9. showErrors : true | false, si vrai, c'est la valeur par défaut, un message d'erreur sera écrit sur la page HTML

  10. chunks : permet d'ajouter uniquement certains morceaux (par exemple, uniquement des morceaux de test unitaire)

  11. chunksSortMode : permet de contrôler la manière dont les morceaux sont triés avant d'être ajoutés à la page. 'none' | 'default' | {function}-default:'auto'

  12. excludeChunks : permet d'ignorer certains morceaux (par exemple, ignorer le tests unitaires )

L'exemple suivant montre comment utiliser ces configurations.

{
 entry: 'index.js',
 output: {
  path: 'dist',
  filename: 'index_bundle.js',
  hash: true
 },
 plugins: [
  new HtmlWebpackPlugin({
   title: 'My App',
   filename: 'assets/admin.html'
  })
 ]
}

Générer plusieurs fichiers HTML

Générer plusieurs fichiers HTML en ajoutant ce plug-in plusieurs fois dans le fichier de configuration.

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

Écrire un modèle personnalisé

Si le fichier HTML généré par défaut ne répond pas à vos besoins, vous pouvez créer votre propre modèle personnalisé. Un moyen pratique consiste à transmettre l'option d'injection, puis à la transmettre à un fichier HTML personnalisé. html-webpack-plugin injectera automatiquement tous les fichiers CSS, js, manifeste et favicon requis dans le balisage.

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

fichier 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>

Si vous disposez d'un chargeur de modèles, vous pouvez l'utiliser pour analyser ce modèle.

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

De plus, si votre modèle est une chaîne, vous pouvez le transmettre en utilisant templateContent.

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入口组件与声明式组件案例对比

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn