1. 程式人生 > >webpack學習(三):配置HtmlWebpackPlugin

webpack學習(三):配置HtmlWebpackPlugin

demo地址: https://github.com/Lkkkkkkg/webpack-demo
webpack初步配置參照 https://blog.csdn.net/qq593249106/article/details/84892069

當前目錄結構:

|- /dist //用於放打包後文件的資料夾
  |- bundle.js //出口檔案
  |- index.html //模板檔案
|- /node_modules
|- /src //用於放原始檔的資料夾
  |- index.js //入口檔案
|- package.json
|- webpack.config.js //webpack配置檔案

index.html

:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>webpack-demo06</title>
</head>
<body>
<script src="bundle.js"></script> <!--這是手動引用的bundle.js-->
</body>
</html>

先前配置的 index.html 中, 手動引用了bundle.js, 如果有多個入口檔案, 則需要手動新增不同的出口檔案, 會比較麻煩, 使用 HtmlWebpackPlugin 外掛就可以使用模板生成html檔案, 這個html檔案會自動引用出口檔案

安裝 HtmlWebpackPlugin 外掛

npm install html-webpack-plugin --save-dev 

配置 webpack.config.js

要使用 HtmlWebpackPlugin , 不但要安裝, 還需要在 webpack 配置檔案中配置 plugins 使用這個外掛:
webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');


module.exports = {
    entry:
'./src/index.js', plugins: [ //webpack 通過 plugins 實現各種功能, 比如 html-webpack-plugin 使用模版生成 html 檔案 new HtmlWebpackPlugin({ filename: 'index.html', //設定生成的HTML檔案的名稱, 支援指定子目錄,如:assets/admin.html }) ], output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') } };

修改一下index.html, 不再手動引用出口檔案bundle.js, 重新構建看看會發生什麼:
index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>webpack-demo06</title>
</head>
<body>
<!--<script src="bundle.js"></script> 不再手動引入出口檔案-->
</body>
</html>

重新構建

終端輸入 npm run build , 開啟index.html:
在這裡插入圖片描述
打包成功, 成功自動引入了 bundle.js 輸出了內容

測試多入口檔案

在 src 目錄下新增多一個 print.js:
print.js

export default function printMe() {
  console.log('I get called from print.js!');
}

當前目錄結構如下:

|- /dist //用於放打包後文件的資料夾
  |- bundle.js //出口檔案
  |- index.html //模板檔案
|- /node_modules
|- /src //用於放原始檔的資料夾
  |- index.js //入口檔案1
  |- print.js //入口檔案2
|- package.json
|- webpack.config.js //webpack配置檔案

修改一下 index.js , 在 index.js 中引用 print.js:
index.js

import _ from 'lodash';
import printMe from './print.js';

function component() {
    var element = document.createElement('div');
    var btn = document.createElement('button'); //新建一個button物件

    element.innerHTML = _.join(['Hello', 'webpack'], ' '); //要用到lodash的語法

    btn.innerHTML = 'Click me and check the console!'; 
    btn.onclick = printMe; //button觸發的事件是引用的print.js暴露的事件

    element.appendChild(btn); //把button物件插入div中

    return element;
}

document.body.appendChild(component());

配置 webpack.config.js

配置多個入口檔案:
webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');


module.exports = {
    entry: {
        app: './src/index.js', //多個入口檔案
        print: './src/print.js'
    },
    plugins: [ //webpack 通過 plugins 實現各種功能, 比如 html-webpack-plugin 使用模版生成 html 檔案
        new HtmlWebpackPlugin({
            filename: 'index.html', //設定生成的HTML檔案的名稱, 支援指定子目錄,如:assets/admin.html
        })
    ],
    output: {
        filename: '[name].bundle.js', //根據入口檔案輸出不同出口檔案
        path: path.resolve(__dirname, 'dist')
    }
};

重新構建

終端輸入 npm run build , 開啟index.html:
在這裡插入圖片描述
成功打包, 此時 index.html 也發生了相應的變化:
index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
  <script type="text/javascript" src="app.bundle.js"></script>
  <script type="text/javascript" src="print.bundle.js"></script></body>
</html>