範例五 - 加入更多的 Plugin

現在我們的網站有一些基礎了,但我們還需要實際的網站樣式。

我們通過 html-webpack-plugin 來做,它讓我們可以產生一個 HTML 頁面使用現有的。我們將使用一個目前現有的 index.html

首先我們需要安裝 plugin:

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

然後在我們的 webpack 設定檔加入:

// webpack.config.js
var path = require('path')
var webpack = require('webpack')
var HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  entry: ['./src/index'],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  plugins: [
    new webpack.optimize.UglifyJsPlugin({
      compressor: {
        warnings: false,
      },
    }),
    new webpack.optimize.OccurenceOrderPlugin(),
    new HtmlWebpackPlugin({
      template: './src/index.html'
    })
  ],
  module: {
    loaders: [{
      test: /\.css$/,
      loaders: ['style', 'css']
    }]
  }
}

這個時候當你執行 webpack,因為我們指定一個 HtmlWebpackPlugin./src/index.html 的 template,它會產生一個檔案叫做 index.html 在我們的 dist 資料夾,而網頁的內容是 ./src/index.html

如果 index.html 作為 template 是空的也沒用,現在是個好時機我們可以填入一些元素進去。

<html>
<head>
  <title>Webpack Tutorial</title>
</head>
<body>
  <h1>Very Website</h1>
  <section id="color"></section>
  <button id="button">Such Button</button>

</body>
</html>

注意到我們沒有放入一個 bundle.js<script> 標籤到我們的 HTML。實際上 plugin 會自動的幫你處理。如果你放入 script,到頭來你會載入兩次相同的程式碼。

而讓我們加入一些基本的樣式在 styles.css

h1 {
  color: rgb(114, 191, 190);
  text-align: center;
}

#color {
  width: 300px;
  height: 300px;
  margin: 0 auto;
}

button {
  cursor: pointer;
  display: block;
  width: 100px;
  outline: 0;
  border: 0;
  margin: 20px auto;
}

備註

我覺得我應該提到 html-webpack-plugin 需要謹慎使用。對我來說,如果你真的只是簡單的啟用一個 SPA,webpack 應該只產生 HTML 檔案。這裡只需要一個 HTML 檔案,我不會推薦它來產生 12 個 HTML 檔案,當作一個學習經驗。這意思不是說你不能使用 html 檔案之類的,像是 angular 指令,只需要 HTML template 檔案。在這個情況下你可以做類似像是:

// ...directive stuff
template: require('./templates/button.html') // 使用 raw loader

相反的,它意味著你不應該做這樣的事情︰

new HtmlWebpackPlugin
  template: './src/index.html'
}),
new HtmlWebpackPlugin({
  template: './src/button.html'
}),new HtmlWebpackPlugin({
  template: './src/page2.html'
})

如果我這個部份我搞錯了,請任何有這方面經驗的人隨時糾正我。

results matching ""

    No results matching ""